完全联接两个不同的SELECT查询

时间:2019-09-05 15:37:35

标签: mysql sql sql-order-by

我有两个表“ abcd”和“ abcd1”。如下所示:

abcd:

+----+------+--------+------+------+
| id | name | phno   | add1 | add2 |
+----+------+--------+------+------+
| 1  | a    | 123    | mno  | pqr  |
| 2  | a    | 1234   | mno1 | pqr1 |
| 3  | a    | 1234   | NULL | NULL |
| 4  | a    | 12345  | NULL | NULL |
| 5  | a    | 123456 | NULL | NULL |
+----+------+--------+------+------+

abcd1:

+----+------+--------+------+------+
| id | name | phno   | add1 | add2 |
+----+------+--------+------+------+
| 1  | a    | 123    | mno  | pqr  |
| 2  | a    | 1234   | mno1 | pqr1 |
| 3  | a    | 1234   | mno2 | pqr2 |
| 4  | a    | 12345  | mno3 | pqr3 |
| 5  | a    | 123456 | NULL | NULL |
+----+------+--------+------+------+

现在,我已经在第一个表(即abcd)上应用了第一个查询:

select id,name,phno 
from abcd 
where id='3';

这给了我以下结果:

+----+------+--------+
| id | name | phno   |
+----+------+--------+
| 3  | a    | 1234   |
+----+------+--------+

第二,我对“ abcd1”表应用了下一个查询,即:

select add1,add2 
from abcd1 
where name='a' 
      and add1!='NULL' 
      and add2!='NULL' 
order by id desc limit 1;

这给了我以下结果:

+------+------+
| add1 | add2 |
+------+------+
| mno3 | pqr3 |
+------+------+

这两个查询对我来说完全正常。

我想要一个SQL查询,通过它可以检索行,如下所示:

+----+------+--------+------+------+
| id | name | phno   | add1 | add2 |
+----+------+--------+------+------+
| 3  | a    | 1234   | mno3 | pqr3 |
+----+------+--------+------+------+

3 个答案:

答案 0 :(得分:1)

似乎您正在将name上的两个表联接在一起:

select t1.id, t1.name, t1.phno 
from abcd AS t1
join abcd1 AS t2 ON t2.name = t1.name 
where t1.id = '3'
      AND t2.add1 IS NOT NULL 
      AND t2.add2 IS NOT NULL 
ORDER BY t2.id DESC LIMIT 1;

答案 1 :(得分:1)

我不确定这样做是否有意义,因为后一个查询的结果几乎与前一个查询的结果无关,但是您可以交叉加入:

SELECT t1.*, t2.*
FROM (query1) AS t1
CROSS JOIN (query2) AS t2
;

答案 2 :(得分:0)

如果您绝对确定,那么两个查询总是返回一行,则可以使用CROSS JOIN将这两行“合并”为一行。

SELECT * 
FROM (
  select id,name,phno 
  from abcd 
  where id='3'
) AS t1
CROSS JOIN
(
  select add1,add2 
  from abcd1 
  where name='a' 
    and add1!='NULL' 
    and add2!='NULL' 
  order by id desc limit 1
) AS t2

您可以try it here

但是请注意,如果您的查询分别返回N和M行,那么使用上面的查询最终将得到N * M行。

编辑: @Uueerdo击败了我,如果这可以解决您的问题,请考虑接受他的回答;)(如果有人要使用小提琴,我将保留此答案)< / p>

相关问题