簡體   English   中英

SQL多選在同一個表和列上進行數據過濾

[英]SQL multiple selects on same table and column for data filtering

我知道我以前做過這個,但是有一段時間沒有做太多的SQL。

我有一個名為lead_detail的表,它有以下列: idlead_idform_idfield_numbervalue

我正在嘗試獲得結果,然后過濾它們。

所以,最初,我得到了所有針對特定問題的特定答案的主要ID。

讓我們說第一個過濾器是我希望所有結果對“你喜歡雞”(field_number為4)的問題回答“是”。

$leadIds = query(SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1')
$leadIds = implode(', ', $leadIds);

然后,我可以通過獲得適當的過濾數據

SELECT * FROM lead_detail WHERE form_id = '1' and lead_id IN ($leadIds)

這非常有效。

如果我想添加SECOND過濾器,我需要對同一查詢中的相同列執行兩次查詢。 我想我需要使用表別名或某些子選擇進行某種連接,但不記得怎么做。

因此,如果我需要知道誰對“你喜歡雞”這個問題回答“是”並且在“你的年齡是多少”時回答“18-24”,我將如何得到合適的$ leadIds?

它就像是組合

SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1'
AND
SELECT lead_id FROM lead_detail WHERE field_number = '5' AND value = '18-24' AND form_id = '1'

內部聯接適用於此:

SELECT DISTINCT(ld1.lead_id)
FROM lead_detail ld1
INNER JOIN lead_detail ld2 ON (ld1.lead_id = ld2.lead_id)
WHERE ld1.field_number = '4' AND ld1.value = 'yes' AND ld1.form_id = '1' 
AND ld2.field_number = '5' AND ld2.value = '18-24' AND ld2.form_id = '1'

但是,可能有一個更簡潔的解決方案。

你不能用

SELECT lead_id 
FROM lead_detail 
WHERE ((field_number = '4' AND value = 'yes') OR (field_number = '5' AND value = '18-24')) AND form_id = '1'

暫無
暫無

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

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