首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用标志联接以不需要联接表中的关联行

使用标志联接以不需要联接表中的关联行
EN

Stack Overflow用户
提问于 2018-08-29 04:15:39
回答 3查看 46关注 0票数 0

我有table1,它有以下列:

  • t1_id (主键,auto_increment)
  • row_1
  • row_2
  • open_1可以是0或1。

我有table2,它有以下列:

  • t1_id (table1.t1_id的外键)
  • row_1可以是0或1
  • 其他一些列

生成表时,如果没有为table2生成列,则table1.open_1 = 1。

因此,如果open_1为1,则table2中没有具有相同t1_id键的行,否则table2中有1行或多行具有相同的t1_id

我想检索table1.row_1, table1.row_2,其中都是真的:

  • open_1为1,或
  • table2.row_1为1

我试过这个:

代码语言:javascript
复制
SELECT table1.row_1, table1.row_2 
FROM table1
JOIN table2
    ON table1.t1_id = table2.t1_id
WHERE table1.open_1 = 1
    OR table2.row_1 = 1

但是它不返回open_1为1的结果。

我认为这是因为当open_1 =1时,table2中没有关联的行,所以JOIN子句不检索任何行。

如果我执行两个查询,我可以很容易地完成它(首先检索open_1为1的行,然后检索table1.t1_id =table2.t1_id的行),但我想在1个查询中完成。

我可以用一个查询来完成这个任务吗?

数据:

table1:

代码语言:javascript
复制
t1_id    row_1    row_2    open_1
1        5        3        1      <---- open_1 = 1, so retrieve this
2        4        7        0
3        6        2        0
4        8        1        0
5        9        7        0

table2:

代码语言:javascript
复制
t1_id    row_1    row_2    row_3
2        0        3        4
2        1        2        5     <--- row_1 is 1
2        1        4        2
3        0        3        4
3        1        2        5     <--- row_1 is 1
4        0        4        2
5        0        3        4

因此,在table1中,第一行的open_1是1,所以我想检索该行,而对于2-5行,open_1是0,所以只有在table2中的匹配行有row_1 =1的情况下,我才想检索这些结果。

因此,我想检索三个结果:

代码语言:javascript
复制
row_1    row_2
5        3
4        7
6        2

我的问题是我无法检索第一行(其中open_1 = 1),因为第二个表中没有对应的行。因此,我希望有一种方法来添加该行,如果open_1 = 1,而不管联接是什么

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-29 04:39:45

您可以使用union子句:

代码语言:javascript
复制
select table1.row_1, table1.row_2 
FROM table1 where table1.open_1 = 1
UNION
SELECT table1.row_1, table1.row_2 
FROM table1
JOIN table2
ON table1.t1_id = table2.t1_id
WHERE table2.row_1 = 1
票数 2
EN

Stack Overflow用户

发布于 2018-08-29 04:39:06

使用左联接

代码语言:javascript
复制
  Select  distinct t1.row_1,t1.row_2 from table1  t1
      left join table2 t2 on
     t1.t1_id=t2.t1_id  where t1.open_1=1 or t2.row_1=1
票数 0
EN

Stack Overflow用户

发布于 2018-08-29 04:42:02

你需要一个左联接

代码语言:javascript
复制
SELECT table1.row_1, table1.row_2 
FROM table1
LEFT JOIN table2
    ON table1.t1_id = table2.t1_id
WHERE table1.open_1 = 1
    OR table2.row_1 = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52069387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档