如何使类似 SQL 的条件搜索只显示一组特定的行 [重复]

Posted

技术标签:

【中文标题】如何使类似 SQL 的条件搜索只显示一组特定的行 [重复]【英文标题】:How to make SQL like condition search only show a specific set of rows [duplicate] 【发布时间】:2019-04-08 08:56:11 【问题描述】:

我有一个查询,我从联系人表中获取信息,如下所示

还有像这样的数字表

我在搜索时获取联系信息及其号码,目前代码如下所示

SELECT contacts.id, fname, lname, email, address,uid,uniqid,
       group_concat(distinct pnumber order by pnumber) c,cid
FROM contacts
LEFT JOIN numbers
    ON contacts.uniqid = numbers.cid
WHERE fname LIKE '%' OR lname LIKE '%' OR pnumber LIKE '%' AND contacts.uid = 8 
group by id, fname, lname, email, address, uid, uniqid, cid

我正在尝试搜索关键字并仅获取属于该用户“uid”的联系人,例如我在此处设置为 8。显然它返回这个

为什么 AND 条件不起作用,我如何获取仅属于特定 uid 的联系人?

注意:很抱歉发布图片,我无法为这张表生成 ascii,因为它们太长了

【问题讨论】:

为什么三个 LIKE 条件都带有通配符?它们的意思是“任何 fname、任何 lname 或任何 pnumber。你可以跳过它们 @LelioFaieta,我同意,看起来很奇怪。这与IS NOT NULL 相同。 @LeiloFaieta 我就是这样说的 【参考方案1】:

你需要括号:

WHERE (fname LIKE '%' OR lname LIKE '%' OR pnumber LIKE '%') AND contacts.uid = 8 

【讨论】:

以上是关于如何使类似 SQL 的条件搜索只显示一组特定的行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 我需要制定一个条件来限制选择只显示与这两个条件相对应的行

SQL/Teradata:如何返回特定值及其前面的行?

SQL内容补充

ORACLE SQL - 如何检查时间是不是在特定范围内?

如何删除 x 没有。具有特定条件的从顶部开始的行数

如何使用 php 从 SQL 数据库中选择包含特定文本的所有行 [重复]