gpt4 book ai didi

mySQL - 如何正确编写 SELECT 语句

转载 作者:行者123 更新时间:2023-11-30 22:08:03 25 4
gpt4 key购买 nike

我有一个 mySQL SELECT 语句,在 WHERE 条件下结合了全文搜索和普通搜索,还有一个像这样的附加 JOIN

SELECT 
customer.*,
countries.name as country
FROM customer
LEFT JOIN countries ON countries.ID = customer.country_id
WHERE customer.num = :keyword
OR customer.city = :keyword
OR customer.email = :keyword
OR MATCH (customer.company) AGAINST (:keyword)
OR countries.name = :keyword

(customer.company) 列中进行全文搜索的查询返回 no result 只要 table.column countries.nameWHERE 条件的一部分。但是对 countries.name 本身的查询是成功的。

如何使用上述示例中所有 WHERE 组件的组合正确编写 SELECT 语句以返回成功的查询?

编辑:

在之前的版本中我使用了这个语句

 SELECT 
customer.* ,
countries.name
FROM customer, countries
WHERE customer.country_id=countries.ID
AND MATCH (customer.company) AGAINST (:keyword)

UNION

SELECT
customer.*,
countries.name
FROM customer, countries
WHERE customer.country_id=countries.ID
AND countries.name=:keyword

效果很好。我只是不知道这是否是查询具有不同搜索(全文和普通)的两个表的有效方法。此外,当我搜索超过 2 列时,代码很容易被破坏,我想避免这种情况。

欢迎任何更多的想法和帮助

最佳答案

您应该检查 NULLs,因为您使用的是 LEFT JOIN:

SELECT 
customer.*,
countries.name as country
FROM customer
LEFT JOIN countries ON countries.ID = customer.country_id
WHERE customer.num = :keyword
OR customer.city = :keyword
OR customer.email = :keyword
OR MATCH (customer.company) AGAINST (:keyword)
OR (countries.name = :keyword OR countries.name IS NULL)

为了澄清,LEFT JOIN 右表的条件应该只放在 ON 子句中,而不是 WHERE 子句中.这有点不同,因为您想将它与所有其他条件进行比较,因此 - NULL 比较。

关于mySQL - 如何正确编写 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41012233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com