1

私は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  

しかし、リストからsupplier_nameを検索したいのですが、どうすればこれを達成できますか?

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

ご協力いただきありがとうございます。

4

2 に答える 2

5

これを試して:

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

SQLフィドル

もう 1 つは、本当に必要な場合を除き、使用を避けることLIKEです (その場合、インデックスでサポートされている WHERE に追加の句を使用すると、クエリを高速化できます)。UsingLIKE '%something%' は、MySQL がインデックスを使用するのを防ぎます (インデックスがある場合)。

于 2013-10-04T10:51:54.333 に答える
4

試す

select * From products p,supplier s where p.supplier_id = s.supplier_id
and s.supplier_name='zukkerburg';
于 2013-10-04T10:50:37.587 に答える