我有两个表“ 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 |
+----+------+--------+------+------+
答案 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>