带有内部选择查询的 MySQL 搜索

Posted

技术标签:

【中文标题】带有内部选择查询的 MySQL 搜索【英文标题】:MySQL search with inner select query 【发布时间】:2013-10-04 10:44:50 【问题描述】:

我正在研究 mysql,但我有一点卡住了。我想触发搜索查询以从数据库表中检索匹配记录。一切正常,但是当我要搜索使用内部选择检索到的记录时,它将不会被搜索。我不知道如何触发查询。

这是我的sqlfiddle 演示

SQL 代码:

CREATE TABLE supplier 
(
 supplier_id int auto_increment primary key, 
 supplier_name varchar(20) 
);

INSERT INTO supplier
(supplier_name)
VALUES
('billgate'),
('jobs'),
('zukkerburg');

CREATE TABLE products 
(
 product_id int auto_increment primary key, 
 supplier_id int,
 product_name varchar(20) 
);

INSERT INTO products
(supplier_id,product_name)
VALUES
('1','microsoft'),
('2','apple'),
('3','facebook');

查询所有记录:

SELECT *,(SELECT supplier_name FROM supplier WHERE supplier_id = products.supplier_id) AS supplier_name FROM products ORDER BY product_id DESC

在上面的演示中,如果我触发如下查询,它将给出正确的结果。

SELECT *,(SELECT supplier_name from supplier where supplier_id = products.supplier_id) as supplier_name FROM products WHERE product_name LIKE '%facebook%' ORDER BY product_id desc  

但我想从列表中搜索供应商名称,那么我该如何实现呢?

-------------HERE YOUR SQL QUERY (ANSWER)----------

提前感谢您的帮助,非常感谢

【问题讨论】:

查看this article,它解释了 SQL 连接。你需要的不是(缓慢、低效的)子选择。 使用内连接代替子查询。 @MichaelBerkowski 感谢好文章。 @PraDes 我将使用内部联接,如果不起作用,请回复您,谢谢。 【参考方案1】:

试试这个:

SELECT 
  *
FROM
  products
INNER JOIN supplier
ON
supplier.supplier_id = products.supplier_id
WHERE
  supplier_name LIKE '%jobs%'
ORDER BY product_id desc;

SQL fiddle

另外,避免使用LIKE,除非你真的必须这样做(在这种情况下,索引支持的 WHERE 中的附加子句可以加快查询速度)。使用LIKE '%something%' 防止 MySQL 使用索引(如果你有一个)。

【讨论】:

他想在supplier_name上搜索 @Dh...没问题,现在你可以接受答案了:) - meta.stackexchange.com/questions/5234/… @Zago23 我知道如何接受答案。干杯我会接受它。 +1 如果你喜欢这个问题。再次感谢人:)【参考方案2】:

试试

select * From products p,supplier s where p.supplier_id = s.supplier_id
and s.supplier_name='zukkerburg';

【讨论】:

工作正常,但在您的答案中搜索特定单词,因此需要使用 LIKE 而不是 EQUAL(=)。谢谢:)

以上是关于带有内部选择查询的 MySQL 搜索的主要内容,如果未能解决你的问题,请参考以下文章

带有多个单词的PHP Mysql搜索查询

当搜索字符串为空时,带有连接的搜索查询显示所有行

尝试在查询中搜索带有或不带有破折号的字段?

使用 php 和 mysql 搜索查询 [关闭]

mysql:通过自定义搜索查询以查找匹配的朋友

带有分页的MySql查询中的随机值