有人可以纠正我的语法错误吗?正在尝试通过名字,姓氏和他们的电子邮件搜索用户
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
所以我想让其他人与简·罗(JANE ROW)分开
我的尝试是
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')
答案 0 :(得分:0)
您不能在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子句中使用缩进和括号。 (您不必将SQL放在一行中,不必确定为什么要在问题中这样做。)