2015-03-02 46 views
1

我需要一些幫助來處理我的查詢。Mysql獲取尚未使用的行

我需要選擇未在另一個查詢中選擇的數據。

因此,什麼是均值爲:
表1有50個問題
表2已選擇32
再就是18不被使用。
我只需要選擇那18個未使用的問題。

希望你能幫助我!

編輯:
表的所有問題:
標識 - 的inputType - InputName - InputLabel

表與被選擇的問題:
編號 - 必要 - 位置

關係:標識與編號

+0

什麼是您的表格結構? – 2015-03-02 10:13:49

+0

表格之間的關係是什麼? – 2015-03-02 10:13:54

+0

看看EXCEPT語句。可能是你在找什麼。 https://msdn.microsoft.com/en-us/library/ms188055.aspx – Veverke 2015-03-02 10:16:15

回答

2

您可以使用LEFT JOIN

SELECT T1.* 
FROM Table1 T1 LEFT JOIN 
    Table2 T2 ON T1.Id=T2.Id 
WHERE T2.required IS NULL 

說明:

當我們加入與LEFT JOIN這些表格,它將選擇從表1,從表2中的所有記錄和相應的記錄(如果有的話)。我們正在排除已經在表2中的問題。

考慮表中的數據:

Table1      Table2 
-------------------------------------------------- 
id Question    id  Question 
1  Question1    1  Question1 
2  Question2    3  Question3 
3  Question3    5  Question5 
4  Question4    
5  Question5    
6  Question6    

那麼這個查詢將導致:

id Question 
-----------------     
2  Question2     
4  Question4 
6  Question6     
+0

只有1個小問題。他現在只獲得了被選中的問題。所以我不得不打開它或類似的東西。 – 2015-03-02 10:34:31

+0

@MathieuP:這是因爲你錯誤地放置了表名。只要改變它。表1應該是包含完整問題的表格。或者你可以使用'RIGHT JOIN'而不更改名稱。兩者都可以工作。 – 2015-03-02 10:36:27

+0

Ehm ..它不適合我...我試過這個.. – 2015-03-02 10:39:42

0

從您的陳述中,它看起來像使用的問題存儲在另一個表格Table2。所以它會是這樣的;

Select * From Table1 A 
Left Join Table2 B On A.QuestionID = B.QuestionID 
Where B.QuestionID is Null 
1
SELECT 
    aq.* 
FROM 
all_questions aq 
LEFT JOIN selected_questions sq ON sq.Id = aq.Id 
WHERE sq.Id IS NULL 
0

您可以使用Except

選擇第一個表的問題,但不是在二表

select QuiestionID from Questions 
except 
select QuiestionID from SelectedQuestions 
0

最終答案我用你所有的alswers做了什麼。

SELECT fbb.* 
FROM formbuildingblock fbb 
LEFT JOIN formbbformtemplate fbbft 
ON fbbft.formBuildingBlockId = fbb.formBuildingBlockId 
WHERE fbbft.formBuildingBlockId IS NULL;