【发布时间】:2010-11-16 17:35:32
【问题描述】:
我想知道如果两者都评估为true,我将如何返回OR 中使用的OR 子句中最左边的条件的结果@。
到目前为止,我遇到的解决方案都涉及在SELECT 中使用CASE 语句,这确实意味着我会放弃OR 子句。
另一个解决方案涉及在ORDER BY 中使用CASE 语句。
是否有任何其他解决方案可以减少 CASE 语句的使用。我问的原因是因为现在只有两个LEFT JOINs,但随着时间的推移会添加更多。
SELECT item.id,
item.part_number,
lang.data AS name,
lang2.data AS description
FROM item
LEFT JOIN
language lang
ON item.id = lang.item
AND (lang.language = 'fr' OR lang.language = 'en')
LEFT JOIN
language lang2
ON item.id = lang2.item
AND (lang2.language = 'fr' OR lang2.language = 'en')
WHERE item.part_number = '34KM003KL'
【问题讨论】:
-
我不明白您的查询... lang.data 和 lang2.data 将始终返回相同的内容。
-
你为什么要以相同的加入条件加入 Language 两次?
-
抱歉,我的示例语句中没有包含“lang.type”。它应该是 lang.type = 'NAME' 和 lang2.type = 'DESCRIPTION'
-
@Martin L:正如所写,lang.data 和 lang2.data 不会总是返回相同的东西。如果 Lang 中有 Nrows 满足条件,N>1,那么您将在查询中返回 N^2 行,Lang 和 Lang2 是不同的 Language 行,在除 N 个案例之外的所有案例中都满足条件。
-
@Andre,您声明需要额外的左连接。你的意思是除了NAME和DESCRIPTION之外还会定义额外的Language.Type?还是您的意思是 Language.language 将被扩展以包含更多的 'fr' 和 'en'?
标签: sql join default-value