很抱歉这个糟糕的头衔,但我都不知道该怎么解释。。。
这是小提琴: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/

10-08 20:44