簡體   English   中英

SELECT子句:可選列?

[英]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

如果您需要非關系數據,則使用非關系數據庫(例如CouchDBMongoDB)可能會更快樂。

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM