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