Mysql - 列关联/连接

时间:2013-05-13 14:39:04

标签: mysql join subquery

我不知道如何解释我的问题,所以这里有一个例子:

表产品

id_product / name_product
1          / aphone
2          / bphone

表tyds,product_tyd = id_product

id_tyd     / product_tyd   /    user_tyd   /   action_tyd    /  data_tyd
11          /      1        /      1        /      5          /   null
12          /      1        /      1        /      8          /   150
13          /      1        /      2        /      3          /   null
14          /      1        /      2        /     -8          /   250
15          /      2        /      3        /      2          /   null
16          /      2        /      3        /      8          /   150
17          /      2        /      2        /      6          /   null
18          /      2        /      2        /      8          /   250

表集合与表格tyds完全相同,但对于旧行:

id_collection / product_collection / user_collection / action_collection / data_collection

    1         /      1             /      9          /      5            /   null
    2         /      1             /      9          /     -3            /   null
    3         /      1             /      9          /     -8            /   150

所以我想选择哪里的线     - action_collection = 8 OR -8     - action_tyd = 8 OR -8 对于每一行,data_tyd和/或data_collection值,但仅针对特定的id_product ......

类似的东西:

结果我期待id_product = 1的请求:

id_product    /    user_x    /   action_x  / data_x
     1        /       1      /       8     /   150
     1        /       2      /      -8     /   250
     1        /       9      /      -8     /   150

所以关键是要依赖action_tyd和data_tyd,我在其他请求中使用CASE并过滤行,无论哪个表都在...除了当然不是相同的列名...

我希望我的例子很明确......我实际上是想在两个单独的请求中做出来。一个用于表格tyds,一个用于表格集合,我认为它可以完成,但是一个单一的请求也可以完成这项工作......

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为你应该将tydscollections合并到一个表中(有一个合适的列来标记每个记录来自哪个表),但事实上你只是想要执行一个UNION

SELECT product_tyd AS id_product,
       user_tyd    AS user_x,
       action_tyd  AS action_x,
       data_tyd    AS data_x
FROM   tyds
WHERE  product_tyd = 1 AND action_tyd IN (-8,8)

UNION ALL

SELECT product_collection,
       user_collection,
       action_collection,
       data_collection
FROM   collections
WHERE  product_collection = 1 AND action_collection IN (-8,8)