2015-03-02 86 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; 
相关问题