MySQL - 加入OR b

时间:2018-04-20 15:16:45

标签: mysql sql join conditional-statements

我们假设我有一个TABLE a,其中COLUMN data加入的另一个表TABLE bTABLE c {1}})因为我想在COLUMN infob中获得c
问题a.data仅与 匹配b.data 或仅c.data匹配。

  • 如何根据b.info获取c.infoa


我尝试了多远:

在语法明显错误的许多尝试之后,我做的最好的是2个查询:

SELECT b.info FROM a INNER JOIN b ON a.data = b.data
SELECT c.info FROM a INNER JOIN c ON a.data = c.data

我想实现一些看起来像这样的东西:

SELECT alias.info FROM a INNER JOIN (b OR c) AS alias ON a.data = alias.data


为什么我要这样做

实际上我可以使用PHP获取我想要的数据并使用它。但我正在制作一个巨大的过程(与我的问题无关),而不是一个好的查询,页面需要花费太多时间来加载。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT IFNULL(b.info,c.info) AS info
FROM a
    LEFT JOIN b ON a.data = b.data
    LEFT JOIN c ON a.data = c.data

答案 1 :(得分:1)

您可以离开加入bc表格,然后使用info字段不是NULL

select coalesce(b.info, c.info) info
from a
  left join b on a.data = b.data
  left join c on a.data = c.data

答案 2 :(得分:1)

如果保证var arrayId = [1,2] // array with interested Id var inExpression = arrayId.flatMap{ String($0) }.joined(separator: ",") // inExpression = "1,2" var query = "SELECT id FROM Product WHERE id IN (\(inExpression))" 在表datab

中是唯一的

我们可以使用外连接来尝试从每个表中获取匹配的行,然后使用SELECT列表中的表达式来测试我们是否有匹配的行。例如:

c

如果我们在SELECT a.data , IF(b.data IS NULL,IF(c.data IS NULL,NULL,'c'),'b') AS info_src , IF(b.data IS NULL,c.info,b.info) AS b_or_c_info FROM a LEFT JOIN b ON b.data = a.data LEFT JOIN c ON c.data = a.data 中找到匹配的行,则b保证为非NULL。我们知道该值是非NULL的,因为它满足相等(b.data)比较。

请注意=是MySQL特定的语法。更便携的ANSI标准兼容版本

IF