Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kombinieren Sie zwei Select-Anweisungen in zwei Spalten?

Wenn jede Ihrer Abfragen nur eine Zeile zurückgibt, können Sie Folgendes verwenden:

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

Wenn Ihre Abfragen mehr als eine Zeile zurückgeben, müssen Sie eine andere Lösung wählen:

Sie können UNION verwenden :(Du wirst die beiden Abfragen mit "NULL" in der anderen Spalte falsch ausgerichtet haben)

(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)
 ) 

Sie können JOIN verwenden Wenn Sie ein Feld haben, das Sie als "Join On" verwenden können, können Sie dieses Feld verwenden, wenn nicht, können Sie ein Feld zum Join hinzufügen (aber Sie müssen die zurückgegebenen Daten überprüfen, um Fehler zu vermeiden). Außerdem müssen Sie überprüfen, um welche Art von Join es sich handelt Gut für Sie (Inner - Left - Right) Im Beispiel füge ich ein Feld zum Join hinzu und verwende einen Inner 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)