![](/img/trans.png)
[英]MySQL query: find the minimum non-null value across all the columns in that record
[英]Select a record with non-null value columns
我陷入了這個問題。 如果我有這樣的表:
----------------------------------------
ID | field1 | field2 | field3| field4 |
----------------------------------------
1 | 1 | 0 | 1 | 0 |
----------------------------------------
2 | 0 | 1 | 0 | 1 |
----------------------------------------
我想編寫一個查詢,選擇僅包含等於1列的記錄,例如1。其中ID = 1
---------------------
ID | field1 | field3
----------------------
1 | 1 | 1
2.其中ID = 2
---------------------
ID | field2 | field4
----------------------
2 | 1 | 1
你們能給我建議還是建議,如何做?
非常感謝您抽出寶貴時間閱讀我的問題。
不,SQL不會這樣做,有條件地在運行時返回列。
在解析和准備SQL語句時確定要返回的列集。 它不能在運行時動態更改。
為了獲得如圖所示的結果,我們將需要兩個不同的查詢
SELECT t.id, t.field1, t.field3
FROM mytable t
WHERE ...
和
SELECT t.id, t.field2, t.field4
FROM mytable t
WHERE ...
我們可以為SELECT列表中的表達式提供別名,但同樣,這些別名必須在SQL文本中指定; 這些在執行時不能更改。
SELECT t.id, 1 AS field2, 1 AS field4
FROM mytable t
WHERE ...
但是我們仍然需要不同的SQL文本來返回field1和field3。
似乎存在可能填充的字段1..4的2 ^ 4(1 + 4 + 6 + 4 + 1)個組合。 總共16個可能的SELECT列表。
我們可以運行一個預查詢,以找出應該返回哪個fieldN,並使用該查詢的結果來制定第二個查詢的文本。
但是這樣做似乎並不必要。
您必須使用WHERE條件來選擇值。 考慮表名稱為Table1。
SELECT * FROM Table1 WHERE ID = 1
如果要從多個ID中選擇,可以使用IN子句。
SELECT * FROM Table1 WHERE ID IN (1,2)
如果只需要Field1,Field3,則只需在SELECT查詢中提及它們即可。 您不需要*,它對應於所有字段。
SELECT Field1, Field3 FROM Table1 WHERE ID = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.