2017-09-27 9 views
0

テーブルA(1つのテーブル)とテーブルB(多数のテーブル)の間に1対多の関係があります。MySQL One to Many Select

私は表Aを照会したいだけ、それは表B.

に少なくとも一つの行があり、私はそれが参加インナーかもしれないと思ったが、私はまだ行がそれぞれに返さ取得しています。表Aからエントリを返します私の現在のクエリである。表B.

SELECT * FROM categories.* INNER JOIN images ON images.category_id = categories.id 

のエントリは、私はそれは私が追加する必要がありますが、私は何を知らないWHERE句であると仮定します。

私はそれが間違った言い回しであると私自身が答えを見つけることができなかったような簡単な質問であることをお詫びします。

+0

を使用していた場合、テーブル構造を提供してください参加左を使用してみてください。 –

+0

http://sqlfiddle.com/を使って完全な例を提供することもできます – kenfire

答えて

2

カテゴリデータに(ではない画像データ)を取得するには条件がWHEREに存在することは、使用しますあなたは

SELECT c.* 
FROM categories c 
INNER JOIN images i ON i.category_id = c.id 
GROUP BY c.id 
HAVING COUNT(DISTINCT i.id) > 0 

または凝集せずに、単に個別の以下のような何かをして

01に参加することができますbは、テーブル内の少なくとも1つの関連付け
SELECT DISTINCT c.* 
FROM categories c 
INNER JOIN images i ON i.category_id = c.id 
+0

私は節が必要ではないと思います。答えは右です –

+0

GROUP BY i.category_id –

+0

グループのために集計機能を持たないグループのために使用されました –

1

いくつかの方法で対応できます。 誰かがフォローしている可能性があります。

SELECT * 
FROM categories 
WHERE EXISTS (SELECT 1 FROM images WHERE images.category_id = categories.id) 

別のサブクエリでDISTINCTを使用することができます(私は公演が前者よりも最悪だと思う):

SELECT * 
FROM categories 
INNER JOIN (SELECT DISTINCT category_id FROM images) images ON images.category_id = categories.id) 
+0

これはうまくいくでしょうが、代わりに@kenfireが提案したようにするつもりですが、感謝のヒープです! –

+0

@OliverGiess彼らは同じレコードを返すことができなかったようです:右のジョイントで別のことをする。 – etsa

+0

私はあなたが何を意味するか見て、私は急いで –

1

左/右結合を使用できます。

私は、テーブルAがカテゴリとテーブルBの画像であったとします。 それは反対

https://www.w3schools.com/sql/sql_join_left.asp

+0

テーブルを逆転させ、単にその方法を選択することをお勧めします。*手の平* –

+0

@OliverGiessあなたはそれを考える時間を要さないこともあります。 – kenfire

1

は、このクエリ

SELECT c.* 
FROM categories c 
INNER JOIN images i ON i.category_id = c.id 
GROUP BY i.category_id 
+0

あなたはごまかすでしょう:)。 –

+1

@MKhalidJunaid haha​​ha何が起こったのか。私は本当にあなたのmysqlの知識に感謝 –