【问题标题】:How to JOIN on different tables based on column value如何根据列值加入不同的表
【发布时间】:2010-12-22 04:18:26
【问题描述】:

广告表
Screenshot http://img90.imageshack.us/img90/6295/adsvo.png

电话桌
Screenshot http://img194.imageshack.us/img194/3713/phones.png

汽车桌
Screenshot http://img35.imageshack.us/img35/1035/carsm.png

我有 3 个表格广告、汽车和电话。

我想加入表格是基于 ads 表格中的类别。

我试过这个查询但没有运气,有什么帮助吗?

SELECT *
  FROM `ads` 
  JOIN `ads.category` ON `ads.id` = `ads.category.id`

** 我无法为您的任何帖子添加评论,但我希望它根据广告表中的类别自动添加。

例如:- 如果表中有电话类别,我将自动加入电话表然后

SELECT *
  FROM `ads` 
  JOIN `phone` ON `ads.id` = `phone.id`

如果表中有汽车类别,我将自动加入汽车表

SELECT *
  FROM `ads` 
  JOIN `cars` ON `ads.id` = `cars.id`

【问题讨论】:

  • 这些表是如何关联的?你希望你的结果是什么样的?

标签: mysql


【解决方案1】:

获取汽车:

SELECT *
FROM ads JOIN cars ON ads.ID = cars.ID

获取电话:

SELECT *
FROM ads JOIN phones ON ads.ID = phones.ID

要同时使用 UNION:

SELECT ads.ID, ads.Title, ads.Desc, ads.category, 'Car' AS AdType, cars.Year AS Col1, cars.cc AS Col2, cars.transmission AS Col3
FROM ads JOIN cars ON ads.ID = cars.ID
UNION ALL SELECT ads.ID, ads.Title, ads.Desc, ads.category, 'Phone' AS AdType, phone.Model AS Col1, phone.Color AS Col2, '' AS Col3
FROM ads JOIN phones ON ads.ID = phones.ID

注意:我建议您在您的汽车和电话表中设置外键,以引用 ads.ID 而不是使用子表的 ID 字段(主键?)

【讨论】:

    【解决方案2】:
    SELECT      ads.*,
                cars.year, cars.cc, cars.transmission,
                phones.model, phones.color
    FROM        ads
      LEFT JOIN cars
      ON        cars.id = ads.id
      LEFT JOIN phones
      ON        phones.id = ads.id
    

    虽然我同意@Scrum,但您可以离开加入他们,然后(在您的代码中)使用类型字段并检索正确的列。

    我也觉得这些列应该是 NULLABLE 并且都在一个表中。我不认为用 1-1 关系(和直接键关系)将它们自己分开是没有意义的。这当然不是标准化(我可以看到)。 也许我累了,无能为力

    【讨论】:

    • 我认为这是另一回事,而不是疲倦和无能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多