在SQL中连接多个表的联合

时间:2016-02-20 04:24:10

标签: mysql

我有以下数据结构:

  • 包含entries
  • 的表entry_id
  • 包含data_intentry_idquestion
  • 列的表data
  • 包含data_textentry_idquestion
  • 列的表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_表中都没有出现。

1 个答案:

答案 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