2011-11-23 8 views
0

を私のクエリはMySQLのサブクエリの奇妙な行動

です私は右のものを作っていますし、何が間違っていた場合
SELECT * 
FROM tables 
WHERE table2_id 
IN (

SELECT id 
FROM table2 
WHERE table3_id 
IN (

SELECT id 
FROM table3 
WHERE name LIKE '%in%' 
) 
OR 
) 
name LIKE 'in%' 
AND id <> '8' 

任意の提案時にその二つ以上の文字

完全にばかげてクエリの
+0

テーブル構造はどのように見えますか? – Helen

+0

サンプルデータが役に立ちます。私はそれがあなたの 'LIKE'式'%in% ' - > **で**に含まれているすべてのものを返すことと、% - > ** **で始まるすべてのものを返すと思います** –

+0

すべてのidsは整数であり、名前のテキストmysqlドライバMyIssam – Sedz

答えて

3

!参加を使用する - それが何のためです!

SELECT tables.* 
FROM tables JOIN table2 ON tables.table2_id = table2.id 
    JOIN table3 ON table2.table3_id = table3.id 
WHERE (name LIKE '%in%' OR name LIKE 'in%' AND id <> 8 
+0

ありがとう、あなたに2つのことを教えていただきありがとうございます。 1-あなたが書いた質問は完全に間違っています 2ばかげて言ってはいけません。質問から必要なものは、 2つのテーブルとし、他の値を返す 本当にありがたいことに助けてくれてありがとう;) – Sedz

+0

@UserB非常に最小のtable2とtable3はクエリで結合することができます。私はtable2.idが一意であると仮定しました。もしそうなら、私のクエリはあなたのものと同じです。ユニークでない場合は重複を得ることができますが、それはIDであり、IDは一意でなければならないと言っています。もう1つは '*'の代わりに 'SELECT tables。*'を編集して、メインテーブルからのみ結果を返すことです。 – Ariel

+0

実際にあなたは正しいですIDはユニークです しかし私はtable3なしでそれを解決しました ありがとう – Sedz