MYSQL 选择使用 concat with not in 语句



有人可以纠正我这个语法错误吗? 我正在尝试按名字、姓氏和电子邮件搜索用户

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放在一行中,不确定为什么在问题中这样做。

最新更新