34 mysql
以下是我的查询,我想要的结果如下所示.我怎么能在mysql中这样做?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Run Code Online (Sandbox Code Playgroud)
结果集需要如下所示:
LastName FirstName OrderNo
Hansen Ola 22456
Hansen Ola 24562
Pettersen Kari 77895
Pettersen Kari 44678
Svendson Tove
34764
Run Code Online (Sandbox Code Playgroud)
ale*_*oot 34
MySQL缺乏对FULL OUTER JOIN的支持.
因此,如果您想在MySQL上模拟完全连接,请查看此处.
通常建议的解决方法如下所示:
SELECT t_13.value AS val13, t_17.value AS val17
FROM t_13
LEFT JOIN
t_17
ON t_13.value = t_17.value
UNION ALL
SELECT t_13.value AS val13, t_17.value AS val17
FROM t_13
RIGHT JOIN
t_17
ON t_13.value = t_17.value
WHERE t_13.value IS NULL
ORDER BY
COALESCE(val13, val17)
LIMIT 30
Run Code Online (Sandbox Code Playgroud)
a20*_*a20 27
完整的mysql FULL [OUTER] JOIN有几种方法.
UNION左连接和右连接.UNION将通过执行ORDER BY操作删除重复项.因此,根据您的数据,它可能无法实现.
SELECT * FROM A
LEFT JOIN B ON A.key = B.key
UNION
SELECT * FROM A
RIGHT JOIN B ON A.key = B.key
Run Code Online (Sandbox Code Playgroud)UNION ALL左连接和右EXCLUDING连接(这是图中的右下图).UNION ALL不会删除重复项.有时这可能是您想要的行为.您还希望使用RIGHT EXCLUDING来避免重复选择A和选择B中的常见记录 - 即左连接已包含来自选择B的常用记录,不允许使用右连接重复该记录.
SELECT * FROM A
LEFT JOIN B ON A.key = B.key
UNION ALL
SELECT * FROM A
RIGHT JOIN B ON A.key = B.key
WHERE A.key IS NULL
Run Code Online (Sandbox Code Playgroud)Qua*_*noi 13
SELECT p.LastName, p.FirstName, o.OrderNo
FROM persons AS p
LEFT JOIN
orders AS o
ON o.orderNo = p.p_id
UNION ALL
SELECT NULL, NULL, orderNo
FROM orders
WHERE orderNo NOT IN
(
SELECT p_id
FROM persons
)
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这个:
(SELECT p.LastName, p.FirstName, o.OrderNo
FROM Persons p
LEFT JOIN Orders o
ON o.OrderNo = p.P_id
)
UNION
(SELECT p.LastName, p.FirstName, o.OrderNo
FROM Persons p
RIGHT JOIN Orders o
ON o.OrderNo = p.P_id
);
+----------+-----------+---------+
| LastName | FirstName | OrderNo |
+----------+-----------+---------+
| Singh | Shashi | 1 |
| Yadav | Sunil | NULL |
| Singh | Satya | NULL |
| Jain | Ankit | NULL |
| NULL | NULL | 11 |
| NULL | NULL | 12 |
| NULL | NULL | 13 |
+----------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)