首页 > 解决方案 > OR 条件中的嵌套 SELECT

问题描述

(首先抱歉英语不好)

我的主要目的是从另一个 SELECT 中的另一个表中检索搜索查询

如果全名和昵称都在同一个表中,这是我的代码

if (isset($q)){
    $query = 'SELECT * from names_list WHERE full_name LIKE \'%' . $q . '%\' OR nickname LIKE \'%' . $q . '%\'';
}

但由于它们不在同一张桌子上,我想替换OR nickname LIKE \'%' . $q . '%\'为 etc 之类的东西,OR SELECT * from nicknames_list但这样做时出错,那么实现这一目标的最佳做法是什么?

谢谢

这是 names_list 表示例

ID 全名 中间名字
1 约翰·马克·怀特 白色的 马克 约翰
2 丹尼·塞缪尔·布朗 棕色的 塞缪尔 丹尼
3 贝拉·格雷 灰色的 贝拉

这是nicknames_list 示例

nick_id ID 昵称
1 1 约翰约翰32
2 1 强尼32
3 2 丹尼12
4 3 贝拉1996
5 3 它的贝拉

标签: phpsqlmariadb

解决方案


您可以通过 2 种方式解决此问题:

1.LEFT JOIN

您可以使用 aLEFT JOIN来连接两个表。然后使用OR条件过滤结果。

SELECT full_name, last_name, middle_name, first_name
FROM names_list
         LEFT JOIN nicknames_list ON names_list.id = nicknames_list.id
WHERE full_name LIKE '%search_query%'
   OR nickname LIKE '%search_query%';

2.UNION ALL

您可以使用UNION ALL运算符来组合来自多个表的选择:

SELECT full_name, last_name, middle_name, first_name
FROM names_list
WHERE full_name LIKE '%search_query%'

UNION ALL

SELECT full_name, last_name, middle_name, first_name
FROM nicknames_list
         JOIN names_list ON names_list.id = nicknames_list.id
WHERE nickname LIKE '%search_query%';

推荐阅读