gpt4 book ai didi

mysql - 我需要有关 mysql 中的 JOIN 查询的帮助

转载 作者:行者123 更新时间:2023-11-29 01:41:01 25 4
gpt4 key购买 nike

我已经开始学习 MySQL,但我遇到了 JOIN 的问题。

我有两个表:purchasesales

purchase
--------------
p_id date p_cost p_quantity
---------------------------------------
1 2014-03-21 100 5
2 2014-03-21 20 2


sales
--------------
s_id date s_cost s_quantity
---------------------------------------
1 2014-03-21 90 9
2 2014-03-22 20 2

我希望在 purchase.date=sales.date 处连接这两个表以获得以下结果之一:

选项 1:

p_id  date         p_cost  p_quantity   s_id   date        s_cost   s_quantity
------------------------------------------------------------------------------
1 2014-03-21 100 5 1 2014-03-21 90 9
2 2014-03-21 20 2 NULL NULL NULL NULL
NULL NULL NULL NULL 2 2014-03-22 20 2

选项 2:

p_id  date         p_cost  p_quantity   s_id   date        s_cost   s_quantity
------------------------------------------------------------------------------
1 2014-03-21 100 5 NULL NULL NULL NULL
2 2014-03-21 20 2 1 2014-03-21 90 9
NULL NULL NULL NULL 2 2014-03-22 20 2

主要问题出在第一个结果的第二行。我不想要这些值
2014-03-21, 90, 9 再次出现在第 2 行...我想要 NULL

我不知道是否可以这样做。如果有人能帮助我,那就太好了。

我试过使用左连接

选择 *来自销售LEFT JOIN purchase ON salesdate = purchasedate

输出:

s_id 日期 s_cost s_quantity p_id 日期 p_cost p_quantity1 2014-03-21 90 9 1 2014-03-21 100 51 2014-03-21 90 9 2 2014-03-21 20 22 2014-03-22 20 2 NULL NULL NULL NULL

但我希望第 2 行的第 4 个值为 NULL

最佳答案

由于没有通用的表表达式或完全外连接可供使用,查询将有一些重复,而需要使用左连接和右连接联合;

SELECT p_id, p.date p_date, p_cost, p_quantity,
s_id, s.date s_date, s_cost, s_quantity
FROM (
SELECT *,(SELECT COUNT(*) FROM purchase p1
WHERE p1.date=p.date AND p1.p_id<p.p_id) rn FROM purchase p
) p LEFT JOIN (
SELECT *,(SELECT COUNT(*) FROM sales s1
WHERE s1.date=s.date AND s1.s_id<s.s_id) rn FROM sales s
) s
ON s.date=p.date AND s.rn=p.rn

UNION

SELECT p_id, p.date p_date, p_cost, p_quantity,
s_id, s.date s_date, s_cost, s_quantity
FROM (
SELECT *,(SELECT COUNT(*) FROM purchase p1
WHERE p1.date=p.date AND p1.p_id<p.p_id) rn FROM purchase p
) p RIGHT JOIN (
SELECT *,(SELECT COUNT(*) FROM sales s1
WHERE s1.date=s.date AND s1.s_id<s.s_id) rn FROM sales s
) s
ON s.date=p.date AND s.rn=p.rn

An SQLfiddle to test with .

关于mysql - 我需要有关 mysql 中的 JOIN 查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com