【发布时间】:2016-06-21 19:43:24
【问题描述】:
所以我必须将一个表连接到另一个表的值上,但是它应该只从连接的表中返回 1 个值。
这些表的关系非常模糊——我正在处理的数据的性质也是如此。 “Cookies”表中的名称可以是CookieAttr1、CookieAttr2 或CookieAttr3 之一。
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 为空,它将加入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”的一个值?
【问题讨论】:
-
你想保留
Choc-Chip这两条记录中的哪一条,这背后的逻辑是什么? -
不清楚这是当前结果还是您的预期结果。我们两者都需要。
-
@Tim_Biegeleisen 巧克力片记录之一。只要颜色一致,颜色就不是那么重要。
标签: mysql duplicates left-join