我的网站上的页面中有很多内部联接的大查询。 我想申请一些左外连接限制1,但如果我把它放入sql给我错误。
这是我的查询的一小部分不是完全的,这个查询只是一部分而且不是完成:
SELECT * FROM products
LEFT OUTER JOIN (origins
LEFT OUTER JOIN origin_aliases ON origin_aliases.origin_id = origins.id
AND origin_aliases.language = '$lang'
LEFT OUTER JOIN (diets LEFT OUTER JOIN diet_aliases ON diet_aliases.diet_id = diets.id AND diet_aliases.language = '$lang')
ON origins.diet_id = diets.id)
ON products.origin_id = origins.id
LEFT OUTER JOIN (product_aliases
LEFT OUTER JOIN (users as users1
LEFT OUTER JOIN profiles as profiles1 ON profiles1.user_id = users1.id
LEFT OUTER JOIN user_options as user_options1 ON user_options1.user_id = users1.id
LEFT OUTER JOIN avatars as avatars1 ON avatars1.user_id = users1.id
)
ON product_aliases.user_id =users1.id
LEFT OUTER JOIN (users as users2
LEFT OUTER JOIN profiles as profiles2 ON profiles2.user_id = users2.id
LEFT OUTER JOIN user_options as user_options2 ON user_options2.user_id = users2.id
LEFT OUTER JOIN avatars as avatars2 ON avatars2.user_id = users2.id
)
ON product_aliases.edit_user_id = users2.id)
ON product_aliases.product_id = products.id
.....
例如,我想在ON 'products.origin_id'='origins.id'
成为可能之后在源外左连接中应用限制1吗?我怎样才能做到这一点?
我试图在条件限制1之后放置但是给我一个错误
语法错误或访问冲突:1064 SQL中有错误 句法;查看与MySQL服务器版本对应的手册 正确的语法
答案 0 :(得分:2)
您可以使用子查询在LIMIT
中使用JOIN
:
... LEFT JOIN (SELECT column1, column2 FROM table LIMIT 2) ON ...
此外,如评论中所述,请勿在包含表格的列名称周围使用单引号。
答案 1 :(得分:1)
如上所述,您的示例已满或有错误。您的派生表没有SELECT
个子句,您引用了表格和列引用,并且不清楚 origin 和 origin_aliases 等名称是表格还是别名。那些是你的语法错误。
更正后,可以将LIMIT
表达式添加到整个查询或任何派生表中。这是我最好的猜测:
SELECT *
FROM products
LEFT OUTER JOIN (
select *
from origins
LEFT OUTER JOIN origin_aliases
ON origin_aliases.origin_id = origins.id
AND origin_aliases.language = '$lang'
LEFT OUTER JOIN (
select *
from diets
LEFT OUTER JOIN diet_aliases
ON diet_aliases.diet_id = diets.id
AND diet_aliases.language = '$lang'
) d
ON origins.diet_id=d.id
LIMIT 1
) a
ON products.origin_id=a.id
我选择使用两个表别名( a 和 b )。我假设起源, origin_aliases ,饮食是表格。请注意,您不应该使用SELECT *
;从每个派生表以及主SELECT
子句中提供所需的列名。