Mysql SQL连接相当复杂,但很复杂

Mysql SQL连接相当复杂,但很复杂,mysql,sql,join,outer-join,Mysql,Sql,Join,Outer Join,很抱歉标题不好,但我甚至不知道如何解释 这是小提琴: 所以我得到了一个非常基本的产品表和我的数据表(本例中为tyds) 简单一点。一个产品可以与零、一个或多个tyd相关 一个TYD的名称是tyds表中的四行。 一个tyd由它的ref_tyd标识 例如,产品_2与tyds N°98和&99相关 其他产品(尚未)与tyds表相关 我想得到的是所有的产品信息,如果它们与tyds相关,则是随附的tyds信息 因此,在我的小提琴中,我期待的结果是: ID_PRODUCT NAME

很抱歉标题不好,但我甚至不知道如何解释

这是小提琴:

所以我得到了一个非常基本的产品表和我的数据表(本例中为tyds)

简单一点。一个产品可以与零、一个或多个tyd相关

一个TYD的名称是tyds表中的四行。 一个tyd由它的ref_tyd标识

例如,产品_2与tyds N°98和&99相关

其他产品(尚未)与tyds表相关

我想得到的是所有的产品信息,如果它们与tyds相关,则是随附的tyds信息

因此,在我的小提琴中,我期待的结果是:

ID_PRODUCT  NAME            REF_TYD         CNT_USER    ACTION_TYD
1           product_1       NONE            0           NONE
2           product_2       98              1           5
2           product_2       99              1           1
3           product_3       NONE            0           NONE
什么变化:

现在我得到了与id_product=2相关的两个tyd(98和99)

所以现在CNT_用户行在两行中返回1和1,而不是求和两个不同的东西

对于98型轮胎,预期动作为5

对于99号类型,预期操作类型为1

因此,SQL只获取他找到的第一个tyd关系,然后转到下一个产品(逻辑上,但不是我想要的:)

当然,我可以先查询所有产品,然后检查每个产品的tyds表。但一枪不就更危险了吗


非常感谢你的帮助

这将为您提供预期结果(请注意添加的GROUP BY列):

选择
products.id_产品作为id_产品,
products.name_products AS name,
合并(tyds.ref_tyd,“无”)为ref_tyd,
作为cnt_用户的SUM(当action_tyd=11时,则为1,否则为0结束),
合并(最大值(动作类型>0和动作类型正常时的情况)

要解决第一个问题(合并两个product_2记录),只需更改

GROUP BY id_product


。第二个错误也很容易修复-您已经说过
当action\u tyd>0和action\u tyd<5时,action\u tyd END
,所以当然不包括action\u tyd 5!只需将其更改为“执行此操作”,我没有考虑group子句中的双参数…对于
GROUP BY id_product
GROUP BY id_product, ref_tyd