【问题标题】:Mysql - column association/joinMysql - 列关联/加入
【发布时间】:2013-05-13 14:39:03
【问题描述】:

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

餐桌用品

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

table collections 与 table 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 或 -8 - action_tyd = 8 或 -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,一个用于表格集合,我认为可以完成,但一个请求也可以完成这项工作......

感谢您的帮助!

【问题讨论】:

  • 您是说希望您的产品信息加上一个或多个可能来自两个表之一的列 - 在一个查询中?
  • 不,我想要 data_X = 8 或 -8 AND product_x = 1 的所有行(对于 id_product = 1),因此产品表并不重要......但它可以使关节在 tyds 和 collections 之间?

标签: mysql join subquery


【解决方案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)

【讨论】:

  • 哈哈正在创建一个小提琴来检查我的查询,但看到你打败了我:sqlfiddle.com/#!2/2e746/1
  • 我需要检查,因为我正在使用左外连接和 case 语句 - 我更喜欢你的回答和解决方案
  • 嘿,看起来工作得很好......这和两个不同的请求有什么区别? (只是一个问题:))
  • @pierreaurelemartin:访问数据库的次数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多