我正试图创建一个查询,该查询出于语言目的两次联接一个表。
但是SQL Developer总是抛出一个错误
SELECT 中的无效标识符
当我尝试使用表的ALIAS时(表2无效(
SELECT
table1.code Code,
table2.descr DescrFr,
table3.descr_en DescrEn
FROM
main_table table1
INNER JOIN
descr_table table2 ON table1.code = table2.code
AND table2.lang = 'fr'
INNER JOIN
descr_table table3 ON table1.code = table3.code
AND table3.lang = 'en'
我没有发现任何对我的案件有帮助的东西,可以告诉我我的查询出了什么问题。
编辑
用户要求进行测试,但出现此错误
错误SQL:ORA-00904:";表3"代码":非有效识别器
SELECT
table1.code AS Code,
table2.descr AS DescrFr,
table3.descr AS DescrEn
FROM main_table table1
INNER JOIN descr_table table2 ON (table1.code = table2.code)
INNER JOIN descr_table table3 ON (table1.code = table3.code)
WHERE (table2.lang = 'fr' AND table3.lang = 'en');
回答
结果是一个手掌。。。初始查询正在工作。。我只是在descr_table中使用了错误的列名。。。
我不知道您使用的版本,但我想您可以尝试SELECT table1.code AS Code,...
。我宁愿在sql查询中不使用那么多CCD_ 2,而宁愿使用至少一个CCD_;"主表";其具有最高优先级。
当然,我想是出了问题。这样你的代码就可以了:
SELECT
table1.code AS Code,
table2.descr AS DescrFr,
table3.descr_en AS DescrEn
FROM
main_table AS table1
INNER JOIN
descr_table AS table2 ON (table1.code = table2.code)
INNER JOIN
descr_table table3 ON (table1.code = table3.code)
WHERE
(table2.lang = 'fr' AND table3.lang = 'en')
我会完全避免双重联接。
- 和从不使用别名,如
table1
这可能是…
SELECT
main.Code,
descr.DescrFr,
descr.DescrEn
FROM
main_table main
INNER JOIN
(
SELECT
code,
MAX(CASE WHEN lang = 'fr' THEN descr END) AS DescrFr,
MAX(CASE WHEN lang = 'en' THEN descr END) AS DescrEn
FROM
descr_table
WHERE
lang IN ('fr', 'en')
GROUP BY
code
)
descr
ON descr.code = main.code
(即使这样,根据您的描述,您甚至不需要外部联接,因为code
存在于descr_table
中。(