我有以下数据结构:
entries
列entry_id
data_int
,entry_id
和question
data
data_text
,entry_id
和question
data
questions
列question_id
现在我想创建一个执行以下操作的MySQL查询:对于给定的entry_id
(比如222),它应该从该表中选择没有行的所有question_id
q( data_int
中的entry_id = 222 AND question_id = q),data_text
中也没有这样的行。这可能在一个查询中,如果是这样,我该怎么做?
样本数据集
条目:
1
2
data_int:
1, 1, 4
1, 2, 56
1, 6, 43
1, 7, -1
data_text:
1, 3, 'hello'
1, 5, 'world'
问题:
1
2
3
4
5
6
7
8
9
10
然后对于entry_id = 1,返回值应为4, 8, 9, 10
,因为这些不会出现在entry_id = 1的data_表中。
对于entry_id = 2,返回值应为1,2,3,4,5,6,7,8,9,10
,因为任何data_表中都没有出现。
答案 0 :(得分:1)
有几种方法可以做到这一点。使用mysql
的更有效方法可能是使用多次outer join
/ null
次检查。
select q.*
from questions q
left join data_int di on q.questionid = di.questionid and di.entryid = 1
left join data_text dt on q.questionid = dt.questionid and dt.entryid = 1
where di.entryid is null and dt.entryid is null