繁体   English   中英

SQL语法错误,语法无效

[英]error in SQL syntax, invalid syntax

我有以下查询:

SELECT s0_.id, s0_.caption, s0_.lowresimageurl, s0_.medresimageurl, s0_.highresimageurl, s0_.price
FROM app_instagram_shop_picture s0_
LEFT JOIN app_instagram_shop s1_ force index (idx_locked_deletedAt)
LEFT JOIN app_instagram_picture_category s2_
LEFT JOIN app_instagram_first_level_category s3_
ON s0_.shop_id = s1_.id 
AND s1_.deletedAt IS NULL
AND s0_.id = s2_.picture_id
AND s2_.first_level_category_id = s3_.id
WHERE (s0_.isShown = 1
AND s1_.id != 32179
AND s1_.expirydate IS NULL
AND s1_.deletedAt IS NULL
AND s1_.isLocked = 0
AND s1_.owner_id IS NULL 
AND s0_.id != 2598561
AND s0_.deletedAt IS NULL
AND s0_.isStyleInspiration = 0 
AND s0_.isLocked = 0 
AND s3_.id = 11 
) 
AND (s0_.deletedAt IS NULL) 
ORDER BY s0_.updated DESC 
LIMIT 16

由于某种原因,这导致我以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE (s0_.isShown = 1
AND s1_.id != 32179
AND s1_.expirydate IS N' at line 10

但是,我似乎无法弄清楚问题出在哪里。

请记住,每个SELECT语句仅具有一个WHERE子句,并在检查的一开始就使用它,此后仅使用AND(我被很多次的我遗忘了,因为忘记了这一点,并在后面的链中放置了额外的WHERE子句)

    SELECT s0_.id, s0_.caption, s0_.lowresimageurl, s0_.medresimageurl, s0_.highresimageurl,                          s0_.price
FROM app_instagram_shop_picture s0_
LEFT JOIN app_instagram_shop s1_ force index (idx_locked_deletedAt)
LEFT JOIN app_instagram_picture_category s2_
LEFT JOIN app_instagram_first_level_category s3_
ON s0_.shop_id = s1_.id 
AND s1_.deletedAt IS NULL
AND s0_.id = s2_.picture_id
AND s2_.first_level_category_id = s3_.id
WHERE s0_.isShown = 1
AND s1_.id != 32179
AND s1_.expirydate IS NULL
AND s1_.deletedAt IS NULL
AND s1_.isLocked = 0
AND s1_.owner_id IS NULL 
AND s0_.id != 2598561
AND s0_.deletedAt IS NULL
AND s0_.isStyleInspiration = 0 
AND s0_.isLocked = 0 
AND s3_.id = 11 

AND s0_.deletedAt IS NULL
ORDER BY s0_.updated DESC 
LIMIT 16

使用JOIN ,您需要为每个联接表指定ONUSING ,以指示联接关系。

您有3个LEFT JOINs但只有一个ON条件。 您可能打算这样做:

FROM app_instagram_shop_picture s0_
  LEFT JOIN app_instagram_shop s1_ force index (idx_locked_deletedAt)
  ON s0_.shop_id = s1_.id 
  AND s1_.deletedAt IS NULL
  LEFT JOIN app_instagram_picture_category s2_
  ON s0_.id = s2_.picture_id
  LEFT JOIN app_instagram_first_level_category s3_
  ON s2_.first_level_category_id = s3_.id

(在第一个ON s0_.shop_id = s1_.id指定其他谓词不适用于其他ON s0_.shop_id = s1_.id表)

支架我的原因错误,请卸下支架并使用

SELECT s0_.id, s0_.caption, s0_.lowresimageurl, s0_.medresimageurl, s0_.highresimageurl, s0_.price
FROM app_instagram_shop_picture s0_
LEFT JOIN app_instagram_shop s1_ force index (idx_locked_deletedAt)
LEFT JOIN app_instagram_picture_category s2_
LEFT JOIN app_instagram_first_level_category s3_
ON s0_.shop_id = s1_.id 
AND s1_.deletedAt IS NULL
AND s0_.id = s2_.picture_id
AND s2_.first_level_category_id = s3_.id
WHERE s0_.isShown = 1
AND s1_.id != 32179
AND s1_.expirydate IS NULL
AND s1_.deletedAt IS NULL
AND s1_.isLocked = 0
AND s1_.owner_id IS NULL 
AND s0_.id != 2598561
AND s0_.deletedAt IS NULL
AND s0_.isStyleInspiration = 0 
AND s0_.isLocked = 0 
AND s3_.id = 11 

AND (s0_.deletedAt IS NULL) 
ORDER BY s0_.updated DESC 
LIMIT 16

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM