很抱歉这个糟糕的头衔,但我都不知道该怎么解释。。。
这是小提琴:http://sqlfiddle.com/#!2/f21e3/5
所以我得到了一个非常基本的产品表和数据表(本例中是tyds)。
使之简单化。产品可以与零、一个或多个tyd相关。
TYD在tyds表中是四行。
其中一个类型由它的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相关的两个TYDS(98&99)。
所以现在CNT_用户行返回两行中的1和1,而不是求两个不同的值。
对于98号tyd,预期操作为5
对于99号tyd,预期的操作是1
所以现在的情况是,SQL只接受他找到的第一个tyd关系,然后转到下一个产品id
当然,我可以首先查询所有产品,然后,对于每个产品,检查tyds表。但一枪就不比一枪好吗?
多谢你的帮助!
最佳答案
这将为您提供预期的结果(请注意添加的“分组依据”列):
SELECT
products.id_product AS id_product,
products.name_product AS name,
COALESCE(tyds.ref_tyd, "NONE") AS ref_tyd,
SUM(CASE WHEN action_tyd = 11 THEN 1 ELSE 0 END) AS cnt_user,
COALESCE(MAX(CASE WHEN action_tyd > 0 AND action_tyd <= 5 THEN action_tyd END), "NONE") AS action_tyd
FROM products
LEFT JOIN tyds ON tyds.product_tyd = products.id_product
GROUP BY id_product, ref_tyd
编辑
而且,我把
关于mysql - SQL连接非常复杂,但是很复杂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19790023/