我们假设我有一个TABLE a
,其中COLUMN data
是加入的另一个表TABLE b
和TABLE c
{1}})因为我想在COLUMN info
或b
中获得c
。
问题a.data
仅与 匹配b.data
或仅与c.data
匹配。
b.info
获取c.info
或a
?
在语法明显错误的许多尝试之后,我做的最好的是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获取我想要的数据并使用它。但我正在制作一个巨大的过程(与我的问题无关),而不是一个好的查询,页面需要花费太多时间来加载。
答案 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)
您可以离开加入b
和c
表格,然后使用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))"
在表data
和b
我们可以使用外连接来尝试从每个表中获取匹配的行,然后使用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