簡體   English   中英

MySQL連接表僅用於查找先前連接的缺失值

[英]MySQL join table only to find missing values from previous join

抱歉,如果我的標題很奇怪,但我什至不確定如何在此描述中措辭我的問題,更不用說簡短標題了。

我們有1000個用戶。 其中有400個是新的。 他們中有500人使用我們添加的新字段更新了個人資料。 100位個人資料尚未更新。

當我嘗試在特定字段上提取數據時,我得到900個結果。

Select j1.question, j1.response
FROM table1 t1
JOIN table2 j1 on t1.id_user = j1.iduser AND j1.idquestion IN (26)

這丟失了100個尚未使用新個人資料問題更新其個人資料的用戶。

當我嘗試在該特定字段上提取數據以包括類似的舊配置文件問題時,我得到1500個結果。

Select j1.question, j1.response
FROM table1 t1
JOIN table2 j1 on t1.id_user = j1.iduser AND (j1.idquestion IN (26) OR j1.idquestion IN (8))

這從26個中抽取900個結果,從8個中抽取原始600個用戶。

所以我的問題是,如何只獲取idquestion IN(26)的數據,然后再獲取idquestion IN(8)剩下的100?

這將為您提供第一個查詢中“丟失”的100個用戶。 我不確定我對quesionID(8)的了解是什么。

         SELECT t1.question, t1.response
           FROM table1 t1
LEFT OUTER JOIN table2 j1 on t1.id_user = j1.iduser 
            AND j1.idquestion IN (26)
          WHERE j1.iduser IS NULL
SELECT IF(q26.question IS NOT NULL, q26.question, q8.question) as question, IF(q26.response IS NOT NULL, q26.response, q8.response) as response
FROM table1 t1
LEFT JOIN table2 as q26
ON 
(t1.id_user = q26.iduser
AND q26.idquestion = 26)
LEFT JOIN table2 as q8
ON
(t1.id_user = q8.iduser
AND q8.idquestion = 8);

這應該工作。 從表1開始並保持左聯接,可確保您為每個用戶獲得一個答案。 如果存在q26值,則連接q26將對其進行聯接;否則,它們將為null。 加入q8將在其他列中執行相同的操作。

您最終得到的是table1,其中某些列僅適用於問題26(或null),其后是僅適用於問題8(或null)的列。 然后,如果在選擇中使用IF(),則可以選擇正確的列。

暫無
暫無

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

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