簡體   English   中英

根據另一個表中記錄的存在將列添加到select語句

[英]Adding a column to a select statement based on the existence of a record in another table

我正在編寫一個SQL查詢,我想在記錄集中添加一個列,該列的值基於另一個表中記錄的存在。 我有一個左連接加入表,我假設我必須在我的SQL中做一些轉軸,但我不熟悉表轉動。

我現有的SQL是

SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label
FROM tabs
INNER JOIN fields
  ON tabs.id = fields.tabid
LEFT JOIN fields_reports
  ON fields_reports.fieldid = fields.id
WHERE fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id

在SQL中發生的是它拉取字段(這是語句的核心)和選項卡(它們是essentailly類別)。 fields_reports表將字段映射到我正在構建的報表。

我需要做的是在我的語句中添加一個列:如果當前字段在fields_reports表中有記錄,並且傳入了報告號(57),則將列值賦值為1,否則為0。

編輯:我的查詢有另一個問題。 現在查詢只是拉動附加到一個報告的字段。 有沒有一種方法,我可以做一個子查詢從fields_reports表中選擇,以便我可以拉所有字段,然后將列附加到報告?

這是現在提取記錄的查詢,但只提取一個報告字段

SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label,
  CASE WHEN fields_reports.id IS null THEN 0 ELSE 1 END AS inReport
FROM fields
INNER JOIN tabs
  ON tabs.id = fields.tabid
LEFT JOIN fields_reports
  ON fields_reports.fieldid = fields.id
WHERE fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id

如果我應該為此開辟一個新問題,請告訴我。

You can `SELECT ..., IF(field_reports.reportid=57),1,0), ... FROM ...`

編輯需要刪除WHERE子句中對reportid的測試,否則這作為一種解決方案毫無意義。 (感謝@Dave Long。)

看看我對你的腳本做了什么:

SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label
FROM tabs
INNER JOIN fields
  ON tabs.id = fields.tabid
LEFT JOIN fields_reports
  ON fields.id = fields.id AND fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id

注意到不同的東西? 我刪除了WHERE子句並將條件移動到LEFT JOIN fields_reportsON子句。 WHERE ,因為它是指定的,把你的LEFT JOIN到INNER JOIN,所以結果集將只嘗試選擇行fields_reports.reportid = 57 如果沒有這樣的行,則不會返回任何行,即這樣您就無法使用標志列。

但現在它可以定義,例如,像這樣:

MAX(CASE fields_reports.reportid WHEN 57 THEN 1 ELSE 0 END) AS TheFlagColumn

只需將其附加到您的選擇列表即可。

這句話將是:

select ....
     , case when LeftJoinedTable.column is null then 0 else 1 end
  from ....

這是有效的,因為當你離開連接並且連接表中不存在行時,列仍然存在於結果中,但它們都是空的。 因此,您可以測試此null值,以查看是否與連接右側的行匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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