我在SO上看到过类似的错误,但我找不到解决问题的方法.我有一个SQL查询,如:
SELECT DISTINCT
a.maxa ,
b.mahuyen ,
a.tenxa ,
b.tenhuyen ,
ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a ,
quanhuyen b
LEFT OUTER JOIN ( SELECT maxa ,
COUNT(*) AS tong
FROM khaosat
WHERE CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
AND
'Sep 5 2011'
GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa <> '99'
AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;
Run Code Online (Sandbox Code Playgroud)
当我执行此查询时,错误结果为:
无法绑定多部分标识符"a.maxa".为什么?
P/s:如果我将查询分成2个单独的查询,它运行正常.
SELECT DISTINCT
a.maxa ,
b.mahuyen ,
a.tenxa ,
b.tenhuyen …
Run Code Online (Sandbox Code Playgroud) 我有一个master
表,其中有多个级别存储的项目,父项和子项,还有第二个表可能有也可能没有其他数据.我需要从我的主表中查询两个级别,并在我的第二个表上有一个左连接,但由于我的查询中的排序,这将不起作用.
SELECT something FROM master as parent, master as child
LEFT JOIN second as parentdata ON parent.secondary_id = parentdata.id
LEFT JOIN second as childdata ON child.secondary_id = childdata.id
WHERE parent.id = child.parent_id AND parent.parent_id = 'rootID'
Run Code Online (Sandbox Code Playgroud)
左连接仅适用于from子句中的最后一个表,因此我只能使其适用于其中一个左连接.在上面的示例中,左连接都不起作用,因为第一个左连接指向from子句中的第一个表,第二个连接将永远不会像这样工作.
我怎样才能做到这一点?
我的原始查询是使用WHERE子句而不是JOIN进行连接.我意识到这并没有让那些没有任何明星或类型的电影没有出现,所以我想我必须做一个LEFT JOIN来展示每部电影.这是我原来的SQL:
SELECT *
FROM movies m, stars s, stars_in_movies sm, genres g, genres_in_movies gm
WHERE m.id = sm.movie_id
AND sm.star_id = s.id
AND gm.genre_id = g.id
AND gm.movie_id = m.id
AND m.title LIKE '%the%'
AND s.first_name LIKE '%Ben%'
ORDER BY m.title ASC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
我试图对电影进行LEFT JOIN我肯定做错了.
SELECT *
FROM movies m, stars s, stars_in_movies sm, genres g, genres_in_movies gm
LEFT JOIN movies m1 ON m1.id = sm.movie_id
LEFT JOIN movies m2 ON m2.id = gm.movie_id
AND sm.star_id = s.id …
Run Code Online (Sandbox Code Playgroud) 为什么在组合外部和内部连接时表的顺序很重要?postgres失败如下:
SELECT grp.number AS number,
tags.value AS tag
FROM groups grp,
insrel archiverel
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
WHERE archiverel.snumber = 11128188 AND
archiverel.dnumber = grp.number
Run Code Online (Sandbox Code Playgroud)
结果:
ERROR: invalid reference to FROM-clause entry for table "grp" LINE 5: LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.d...
^ HINT: There is an entry for table "grp", but it cannot be referenced from this part of the query. …
Run Code Online (Sandbox Code Playgroud) SELECT p.id
FROM produkty p, przyporzadkowania pr, stany_magazynowe, gk_grupy_produkty
INNER JOIN sub_subkategorie ssi
ON pr.sub_subkategorie_id = ssi.ID
Run Code Online (Sandbox Code Playgroud)
表及其重要字段
produkty - id, pozycja
przyporzadkowania - id, produkt_id, sub_kategoria_id, sub_subkategoria_id
sub_subkategorie - id, subkategorie_id, pozycja
subkategorie - id, kategorie_id, pozycja
kategorie - id, pozycja
Run Code Online (Sandbox Code Playgroud)
错误"#1054 - 'on子句'中的未知列'pr.sub_subkategorie_id'"
试过
SELECT p.id, pr.sub_subkategorie_id
Run Code Online (Sandbox Code Playgroud)
结果相同.
完整查询(未通过上述查询失败进行测试):
SELECT p.id
FROM produkty p, przyporzadkowania pr, stany_magazynowe, gk_grupy_produkty
INNER JOIN sub_subkategorie ssi ON pr.sub_subkategorie_id = ssi.ID
INNER JOIN subkategorie si ON ssi.subkategorie_id = si.id
INNER JOIN kategorie c …
Run Code Online (Sandbox Code Playgroud)