mysql - SQL连接相当复杂,但需要fiddle

标签 mysql sql join outer-join

很抱歉这个糟糕的标题,但我什至不知道如何解释......

这是 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/

相关文章:

MySQL 表名称

java - 错误: The string representation of a date/time value is out of range

php - 使用左连接子查询优化搜索查询

mysql - SQL连接2个表: 1 `ON` vs 2 `ON`

mysql - 多个内部联接以获得复杂的报告,但不起作用

java - 从Java将变量插入SQL查询

mysql - 删除 IN(1 2 10 5 5 ) 的 order by ?

python - Django ManyToManyField 是否创建具有冗余索引的表?

MySQL - 将来自同一个表的多个选择组合成一个结果表与一个组

java - 简单的登录页面