很抱歉这个糟糕的标题,但我什至不知道如何解释......
这是 fiddle :http://sqlfiddle.com/#!2/f21e3/5
所以我得到了一个非常基本的产品表和我的数据表(在本例中为 tyds)。
为了简单起见。一个产品可以与零个、一个或多个 tyd 相关。
什么是 TYD,它是 tyds 表中的四行。 一个 tyd 由它的 ref_tyd 来标识。
例如,product_2 与 tyds N° 98 && 99 相关。
其他产品(尚)与 tyds 表无关。
我想要获取的是所有产品信息,如果它们与 tyds 相关,则还需要附带的 tyds 信息。
所以,在我的 fiddle 中,这是我期望的结果:
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_USER 行在两行中都返回 1 和 1,而不是对两个不同的值求和。
对于 tyd N° 98,action_tyd 预期为 5
对于 tyd N° 99,action_tyd 预期为 1
所以发生的情况是,SQL 仅获取他找到的第一个 tyd 关系,然后转到下一个 Product_id。符合逻辑,但不是我想要的:)
当然,我可以进行第一个查询来获取所有产品,然后针对每个产品检查 tyds 表。但一次性不是更好吗?
非常感谢四位的帮助!
最佳答案
好的。
要解决第一个问题(两个product_2记录正在合并),只需更改
GROUP BY id_product
至
GROUP BY id_product, ref_tyd
。第二个错误也很容易修复 - 你已经说过CASE WHEN action_tyd > 0 AND action_tyd < 5 THEN action_tyd END
,所以当然不包括5的action_tyd!只需将其更改为 <= 5。
关于mysql - SQL连接相当复杂,但需要fiddle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19790023/