MySql-优先加入LEFT JOIN,但没有重复项

奇摩

因此,我必须将一个表联接到另一个表的值上,但是它应该只从联接的表返回1个值。
这些表之间的关系非常模糊-我正在处理的数据的性质也是如此。在“”饼干'表的名称可能是任何一个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”获得一个价值?

Juan Carlos Oropeza的占位符图像

您始终可以COALESCE在一个子查询中使用a ,但是您的group by并不是很清楚

SQL小提琴演示

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

输出

但是不知道group by你想要什么

| 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 |

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有重复值的MySQL Join查询

来自分类Dev

MySQL的自我加入与group_concat,没有重复

来自分类Dev

MySQL LEFT OUTER JOIN没有给出正确的结果

来自分类Dev

MySQL-或不都没有重复项

来自分类Dev

mysql加入消除重复

来自分类Dev

mysql加入消除重复

来自分类Dev

MySQL LEFT JOIN返回重复的结果

来自分类Dev

Mysql Left join避免重复表

来自分类Dev

MySQL多个LEFT JOIN返回重复的行

来自分类Dev

LEFT JOIN 中的列名重复 | MySQL

来自分类Dev

带有IF的MySQL LEFT JOIN

来自分类Dev

在R中没有重复的Left_Join

来自分类Dev

mysql AND vs JOIN输出重复项

来自分类Dev

带有LEFT JOIN的MySQL DISTINCT查询通过主键选择重复的行

来自分类Dev

mysql 'ORDER BY' 加入没有值的列

来自分类Dev

Mysql:创建具有多个自我联接的视图,结果中没有重复项

来自分类Dev

没有主键时如何使用mysql join处理重复插入-MySQL

来自分类Dev

MySQL JOIN->即使没有匹配项,也从正确的表中获取所有数据

来自分类Dev

MySQL JOIN->即使没有匹配项,也从正确的表中获取所有数据

来自分类Dev

MySQL与Left Join相反

来自分类Dev

MySQL LEFT JOIN 与 OR 条件

来自分类Dev

MySQL查找并显示所有重复项

来自分类Dev

在第二个表中正确显示具有多个匹配项的mySQL LEFT JOIN

来自分类Dev

在mysql和group中的Join语句中删除重复项

来自分类Dev

MySQL-加入用户最新级别,没有任何级别?

来自分类Dev

MYSQL - 即使行没有加入也选择行

来自分类Dev

MySQL中没有任何东西的“加入”是什么?

来自分类Dev

Postgres - 如何加入没有重复的表

来自分类Dev

mysql加入3表,但“ COUNT”重复