有人可以纠正我这个语法错误吗? 我正在尝试按名字、姓氏和电子邮件搜索用户
SELECT
USERID,
FNAME,
LNAME
FROM
USERS
WHERE
CONCAT(FNAME, ', ', LNAME, ', ', EMAIL) LIKE CONCAT('%', REPLACE('keyword ', ' ', '%'), '%', '%') NOT IN (
SELECT
PRODUCT_ID
FROM
ITEMS
WHERE
USER = 'JANE'
AND PRICE = '400'
AND ORDER = 'PAID'
)
我想搜索并获取用户ID,名字和姓氏。 但我不想得到简,价格= 400,订单=已付
TABLE USER
USERID FNAME LNAME EMAIL
1 JANE DEO TES@TED.COM
2 KEL DEO TES@TED.COM
3 MK DEO TES@TED.COM
TABLE ITEMS
PRODUCT_ID PRICE ITEM_NUM USER USERID
1 400 40 JANE 1
2 200 20 KEL 2
3 100 10 MK 3
所以我想让其他人除了简·罗
我的尝试是
SELECT SND.USERID, SND.FNAME, SND.LNAME WHERE CONCAT(FNAME, ', ', LNAME, ', ', EMAIL) LIKE CONCAT('%', REPLACE('keyword', ' ', '%'), '%', '%') FROM items as M JOIN users as SND ON SND.USERID WHERE NOT EXISTS(SELECT * FROM ITEMS WHERE M.USER = 'JANE' AND M.PRICE ='400' AND M.ITEM_NUM ='40')
不能在 select 和 from 子句之间包含 where 子句
SELECT
SND.USERID
, SND.FNAME
, SND.LNAME
>> no where clause here
FROM items AS M
INNER JOIN users AS SND ON SND.USERID
WHERE NOT EXISTS (
SELECT *
FROM ITEMS
WHERE M.USER = 'JANE'
AND M.PRICE = '400'
AND M.ITEM_NUM = '40'
)
只需在一个(且仅(where 子句中包含所有想要的条件,根据需要使用 AND 或 OR 组合这些条件。我已经更改了连接条件,并更改了使用的 NOT 语法。
SELECT
SND.USERID
, SND.FNAME
, SND.LNAME
FROM items AS M
INNER JOIN users AS SND ON M.userid = SND.userid
WHERE CONCAT(FNAME, ', ', LNAME, ', ', EMAIL) LIKE CONCAT('%', REPLACE('keyword', ' ', '%'), '%', '%')
AND NOT (
M.USER = 'JANE'
AND M.PRICE = '400'
AND M.ITEM_NUM = '40'
)
我对您在上面使用concat()
不太满意,但是,它看起来效率很低,而是为什么不对每列重复 LIKE 测试。(是的,它可能会使 SQL 代码更长,但这不是查询执行时间的指标。
SELECT
SND.USERID
, SND.FNAME
, SND.LNAME
FROM items AS M
INNER JOIN users AS SND ON M.userid = SND.userid
WHERE (
SND.FNAME LIKE CONCAT('%', REPLACE('keyword', ' ', '%'))
or SND.LNAME LIKE CONCAT('%', REPLACE('keyword', ' ', '%'))
or SND.EMAIL LIKE CONCAT('%', REPLACE('keyword', ' ', '%'))
)
AND NOT (
M.USER = 'JANE'
AND M.PRICE = '400'
AND M.ITEM_NUM = '40'
)
请注意在 where 子句中使用 or 时使用缩进和括号。(您不必将SQL放在一行中,不确定为什么在问题中这样做。