Vai ir iespējams izveidot atlases izteikumu, kas pieņem tikai NOT NULL vērtības?
Šobrīd es izmantoju šo:
SELECT * FROM table
Un tad man ir jāfiltrē nulles vērtības ar php cilpu.
Vai ir veids, kā to izdarīt:
SELECT * (that are NOT NULL) FROM table
?
Šobrīd, kad es izvēlos *, es saņemu val1,val2,val3,null,val4,val5,null,null utt....., bet es gribu iegūt tikai tās vērtības, kas nav null. Vai tas ir iespējams bez filtrēšanas ar cilpu?
Jāizmanto IS NOT NULL
. (Salīdzināšanas operatori =
un <>
abos gadījumos dod UNNULL
ar NULL
abās izteiksmes pusēs.)
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Tikai pilnīguma labad minēšu, ka MySQL var noliegt arī nulles drošo vienlīdzības operatoru, bet tas nav standarta SQL.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
Rediģēts, lai atspoguļotu komentārus. Izklausās, ka jūsu tabula, iespējams, nav pirmajā normālformā, un tādā gadījumā struktūras maiņa var atvieglot jūsu uzdevumu. Tomēr ir vēl daži citi veidi, kā to izdarīt...
SELECT val1 AS val
FROM your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2
FROM your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/
Iepriekšminētā veida trūkums ir tas, ka tas skenē tabulu vairākas reizes katrai kolonnai. Iespējams, to var novērst, izmantojot tālāk minēto metodi, bet es to neesmu pārbaudījis MySQL sistēmā.
SELECT CASE idx
WHEN 1 THEN val1
WHEN 2 THEN val2
END AS val
FROM your_table
/*CROSS JOIN*/
JOIN (SELECT 1 AS idx
UNION ALL
SELECT 2) t
HAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/
Varat filtrēt rindas, kurās konkrētā slejā ir NULL vērtība:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT NULL
Ja vēlaties izfiltrēt rindas, kurās jebkurā slejā ir nulles vērtība, izmēģiniet šo:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
-- ...
AND coln IS NOT NULL
Atjauninājums: Pamatojoties uz jūsu komentāriem, iespējams, jūs to vēlaties?
SELECT * FROM
(
SELECT col1 AS col FROM yourtable
UNION
SELECT col2 AS col FROM yourtable
UNION
-- ...
UNION
SELECT coln AS col FROM yourtable
) T1
WHERE col IS NOT NULL
Un es piekrītu Martinam, ka, ja jums tas ir nepieciešams, tad, iespējams, jums vajadzētu mainīt datu bāzes dizainu.
Select * from your_table
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
Vienīgais šīs pieejas trūkums ir tas, ka var salīdzināt tikai 5 kolonnas, pēc tam rezultāts vienmēr būs false, tāpēc es salīdzinu tikai tos laukus, kas var būt NULL
.