gpt4 book ai didi

MySql - 根据偏好左连接但没有重复项

转载 作者:行者123 更新时间:2023-11-29 11:40:28 27 4
gpt4 key购买 nike

所以我必须将一个表连接到另一个表中的值,但它应该只从连接的表中返回 1 个值。
这些表的关系非常模糊——就像我正在处理的数据的性质一样。 “Cookies”表中的名称可以是 CookieAttr1CookieAttr2CookieAttr3 之一。

Cookies
|-----------------------------|
| CookieName | CookieValue |
|-------------+---------------|
| Choc-Chip | 1200 |
| Dough | 500 |
|-----------------------------|

CookieColor
|-----------------------------------------------------------------|
| Id | CookieAttr1 | CookieAttr2 | CookieAttr3 | Color |
|-----+---------------+---------------+---------------+-----------|
| 1 | | Choc-Chip | Dough | Red |
| 2 | | Choc-Chip | Crumbs | Orange |
| 3 | | Sultanas | Dough | Red |
| 4 | | Choc-Chip | Dough | Blue |
| 5 | Dough | | Rounded | Purple |
| 6 | Dough | Big | Rounded | Green |
| 7 | Rounded | | Rounded | Pink |
|-----------------------------------------------------------------|

到目前为止,该表已根据首选项连接 - 如果 CookieAttr1 为 null,它将先连接 CookieAttr2,然后连接 CookieAttr3(这将总是有一个值)

SELECT 
CookieName,
CookieValue,
Color
FROM Cookies
LEFT OUTER JOIN (
SELECT
Color,
CookieAttr1,
CookieAttr2,
CookieAttr3
FROM CookieColor
GROUP BY CookieAttr3
) CookieColor
ON COALESCE(CookieAttr1, CookieAttr2, CookieAttr3) = CookieName

出现的问题是,该表可能会返回重复项,因为按 CookieAttr3 分组可能具有多个相同的 CookieAttr2 值(它所加入的值)。

CookieColor (GROUPED BY `CookieAttr3`)
|-----------------------------------------------------------------|
| Id | CookieAttr1 | CookieAttr2 | CookieAttr3 | Color |
|-----+---------------+---------------+---------------+-----------|
| 1 | | Choc-Chip | Dough | Red |
| 2 | | Choc-Chip | Crumbs | Orange |
| 5 | Dough | | Rounded | Purple |
|-----------------------------------------------------------------|

==========> result of query
|-----------------------------------------|
| CookieName | CookieValue | Color |
|-------------+---------------+-----------|
| Choc-Chip | 1200 | Red |
| Choc-Chip | 1200 | Orange |
| Dough | 500 | Purple |
|-----------------------------------------|

==========> Preferred Result
|-----------------------------------------|
| CookieName | CookieValue | Color |
|-------------+---------------+-----------|
| Choc-Chip | 1200 | Red |
| Dough | 500 | Purple |
|-----------------------------------------|

我怎样才能只获得“Choc-Chip”的一个值?

最佳答案

您始终可以在一个子查询中使用COALESCE,但您的分组依据不明确

<强> SQL Fiddle Demo

SELECT CookieAttr, Color, CookieValue
FROM
(
SELECT `Id`,
COALESCE(CookieAttr1, CookieAttr2, CookieAttr3) CookieAttr,
`Color`
FROM CookieColor
) C
JOIN Cookies
ON C.CookieAttr = Cookies.CookieName

输出

但不知道你想从中得到什么分组依据

| CookieAttr |  Color | CookieValue |
|------------|--------|-------------|
| Choc-Chip | Orange | 1200 |
| Choc-Chip | Blue | 1200 |
| Choc-Chip | Red | 1200 |
| Dough | Purple | 500 |
| Dough | Green | 500 |

如果添加

GROUP BY CookieAttr;            

但是颜色是随机的。

| CookieAttr |  Color | CookieValue |
|------------|--------|-------------|
| Choc-Chip | Orange | 1200 |
| Dough | Purple | 500 |

关于MySql - 根据偏好左连接但没有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35857607/

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