Mysql 在两列中合并两个select语句?
我有两个选择语句 一, 二, 我想在不同的列中组合两个select语句,当我使用union all时,它会给我一列和两个查询的结果,我希望每个查询结果在不同的列中,但当我使用像这样的内部联接时Mysql 在两列中合并两个select语句?,mysql,Mysql,我有两个选择语句 一, 二, 我想在不同的列中组合两个select语句,当我使用union all时,它会给我一列和两个查询的结果,我希望每个查询结果在不同的列中,但当我使用像这样的内部联接时 select a.End_Date , b.Start_Date from ( select End_Date from table1 where End_Date not in ( select Start_Date from table1 ) ) a join (select Start_Date
select a.End_Date , b.Start_Date from
( select End_Date from table1
where End_Date not in (
select Start_Date
from table1
) ) a
join
(select Start_Date
from table1 where Start_Date not in (
select End_Date
from table1)
) b
on 1=1
它给了我结果每个记录重复四次帮助我下一步做什么???如果每个查询只返回一行,您可以使用:
SELECT
(select Start_Date
from table1 where Start_Date not in (
select End_Date
from table1)
) AS StartDate,
(select End_Date from table1
where End_Date not in (
select Start_Date
from table1)
) AS EndDate
如果查询返回的行数超过1行,则必须选择其他解决方案:
您可以使用UNION:
在另一列中,这两个查询将与NULL不对齐
(select Start_Date, Null AS EndDate
from table1 where Start_Date not in (
select End_Date
from table1)
)
UNION
(select Null As StartDate, End_Date
from table1
where End_Date not in (
select Start_Date
from table1)
)
你可以使用JOIN
如果有一个字段要用作连接,则可以使用此字段;如果没有,则可以添加一个字段以连接,但需要检查返回的数据以避免错误
此外,你还必须检查什么样的连接可能对你的左内右旋有好处
在本例中,我添加了一个要联接的字段并使用了内部联接:
SELECT Start_Date, End_Date
FROM
(select 1 as InnerId, Start_Date
from table1 where Start_Date not in (
select End_Date
from table1)
) As Tab1
INNER JOIN
(select 1 as InnerId, End_Date from table1
where End_Date not in (
select Start_Date
from table1)
) AS Tab2
USING(InnerId)
在结果的每一行上,这两个日期应该如何配对?您能显示一些示例输入和所需的结果吗?这不是与其他两个答案相同,只是不太详细吗?@Barmar这不是一个连接。只需为每个选择提供一列。您可以在每次选择后使用as columnName为列命名。如果select子句返回的行数超过1行,则无法将select子查询放入select子句。我不理解您的评论。其他答案没有连接。它们已被删除,因为它们不起作用。@Barmar我正在通过电话写信,无法复制/粘贴。我会尽量把我的答案修改得更清楚
(select Start_Date, Null AS EndDate
from table1 where Start_Date not in (
select End_Date
from table1)
)
UNION
(select Null As StartDate, End_Date
from table1
where End_Date not in (
select Start_Date
from table1)
)
SELECT Start_Date, End_Date
FROM
(select 1 as InnerId, Start_Date
from table1 where Start_Date not in (
select End_Date
from table1)
) As Tab1
INNER JOIN
(select 1 as InnerId, End_Date from table1
where End_Date not in (
select Start_Date
from table1)
) AS Tab2
USING(InnerId)