gpt4 book ai didi

mysql - 连接两个表,其中右表包含 ID 和子 ID,且不重复

转载 作者:行者123 更新时间:2023-11-29 21:58:46 24 4
gpt4 key购买 nike

如果表 A 中有以下条目:

| Cart| X_ID| Y_ID|
|-----------------|
| 1 | 1 | NULL|
| 2 | 1 | 1 |
| 3 | 1 | 2 |
| 4 | 2 | NULL|
| 5 | 2 | 2 |

我有表 B:

| xid | xstr| yid | ystr|
|-----------------------|
| 1 |Apple| 1 | Seed|
| 1 |Apple| 2 | Stem|
| 2 | Rock| 1 | Red |
| 2 | Rock| 2 | Blue|

我需要什么:

| Cart| X_ID| xstr| Y_ID| ystr|
|-----------------------------|
| 1 | 1 |Apple| NULL| NULL|
| 2 | 1 |Apple| 1 | Seed|
| 3 | 1 |Apple| 2 | Stem|
| 4 | 2 | Rock| NULL| NULL|
| 5 | 2 | Rock| 2 | Blue|

我现在有一些东西运行得很好,但我认为它效率低下。

SELECT DISTINCT
A.Cart,
A.X_ID,
ISNULL(B2.xstr, '') AS xstr
A.Y_ID,
ISNULL(B3.ystr, '') AS ystr
FROM
A
LEFT OUTER JOIN (SELECT DISTINCT tmp.xid, tmp.xstr FROM B AS tmp) AS B2
ON A.X_ID = B2.xid
LEFT OUTER JOIN (SELECT DISTINCT tmp.yid, tmp.ystr FROM B AS tmp) AS B3
ON A.Y_ID = B2.yid

有更简单的方法吗?我必须为一堆“ID”执行此操作

我刚刚意识到这并不能解释 Y 依赖于 X 的情况。理想情况下,我想检查 X != null, y(x) 是否存在

最佳答案

最简单的方法是这样的:

SELECT
A.Cart,
A.X_ID,
COALESCE(X.xstr, '') AS xstr,
A.Y_ID,
COALESCE(Y.xstr, '') AS ystr,
..
FROM
A LEFT JOIN B AS X ON A.X_ID = B.xid
LEFT JOIN B AS Y ON A.Y_ID = B.yid
GROUP BY
A.Cart,
A.X_ID,
A.Y_ID

同时对几个字段进行 GROUP BY 并选择非聚合列通常不被认为是一个好习惯,请参阅 how MySQL handles group by queries ,但在这种情况下应该完全没问题。

如果可能的话,我建议您使用规范化的数据库结构。

关于mysql - 连接两个表,其中右表包含 ID 和子 ID,且不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32875780/

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