[英]SELECT clause: Optional Columns?
我想在我的MYSQL數據庫上運行一個查詢。 我正在搜索的表具有一個file_type字段,它將是三個值(1,2,3)之一。 根據這些值,我想從數據庫中查找不同的信息。
因此,例如,如果“ file_type”字段為1或2,那么我想選擇字段a,b,c,d。但是,如果我注意到file_type = 3,那么我想選擇字段a,b,c,d,e, F
可以在單個SELECT語句中完成嗎? 像這樣-ish
my_simple_query = SELECT file_type,a,b,c,d FROM table1
my_new_query = SELECT file_type,a,b,c,d (AND e,f IF file_type = 3) FROM table1
謝謝大家
----------------------------------添加--------------- --------------------
如果將e,f存儲在另一個表中,該怎么辦?
my_multitable_query = SELECT file_type,id,a,b,c,d (AND e,f FROM table2 WHERE id=id) FROM table1
讓我漂移?
不可以,SQL SELECT語句不支持可選列。
但是您可以指定邏輯以僅基於條件返回值,否則它們將為null:
SELECT a,b,c,d,
CASE WHEN file_type = 3 THEN t2.e ELSE NULL END AS e,
CASE WHEN file_type = 3 THEN t2.f ELSE NULL END AS f
FROM TABLE_1 t1
JOIN TABLE_2 t2 ON t2.id = t1.id
如果您需要非關系數據,則使用非關系數據庫(例如CouchDB或MongoDB)可能會更快樂。
在SQL中,必須在編寫查詢時聲明所有列。 所有這些列都必須出現在結果集的每一行上。 列的集合不能根據每一行的內容而有所不同。 實際上,這就是關系數據庫的定義(以及每行每一列必須具有相同類型的要求)。
關於您的其他問題,這可能會出現問題:
SELECT t1.file_type, t1.a, t1.b, t1.c, t1.d, t2.e, t2.f
FROM table1 t1
LEFT OUTER JOIN table2 ON t1.id=t2.id;
即使結果集的每一行都為NULL,也仍然會得到e和f列,因為table1中給定行的table2中沒有匹配項。
這將為您提供一種稱為“ 類表繼承”的模式。
不熟悉mysql,但為什么不使用UNION
?
> SELECT file_type,a,b,c,d FROM table1 WHERE file_type in (1,2)
> UNION
> SELECT file_type,a,b,c,d,e,f FROM table1 WHERE file_type = 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.