2016-06-14 5 views
0

2つのテーブルを比較し、行になかった値を出力します。WhereとLikeのMYSQL

「%2」ではなく「%2」のような行を追加するにはどうすればよいですか?

私はチェックしたい:このためのテーブルで

SELECT one, two FROM table1 WHERE LIKE %two NOT IN (SELECT LIKE %two2 FROM table2) 

は、最初の場所で随時0ですが、これは私が

をフェードアウトしなければならない私は唯一の行名一切変数を持っていません。私はそれを行うことができますか?

+0

'table1'と' table2'の間に参照フィールドがありますか?あなたは内側のクエリにこの条件を追加する必要があると思うので、 '(SELECT two2 FROM table2 WHERE table1.two = table2.tow2)' - **これはうまくいくでしょう:** 'SELECT one、two FROM table1 WHERE 2 NOT IN(SELECT two2 FROM table2 WHERE table1.two = table2.two2)とNOT IN(SELECT one1 FROM table2 WHERE table1.one = table2.one1) ' –

答えて

2

あなたの状態を逆転させ、代わりにトリッキーLEFT JOINを使用することができます。アプローチは、あなたがサブクエリの数を削減し、大幅にパフォーマンスと読みやすさを改善することを

SELECT one, two FROM `table1` 
LEFT JOIN `table2` ON 
    `table1`.`one` = `table2`.`one1` 
    OR `table1`.`two` = `table2`.`two2` 
    -- List others field comparasion using OR here -- 
WHERE `table2`.`one1` IS NULL; 

:次に、クエリは次のようになります。

+0

私はチェックしたいという意味です: SELECT one、twoこのテーブルは時々最初から0であるが、これはフェードアウトする必要があるので、 – joergi1988

+0

のようにしてください。 (%LIKE '%two2' FROM' table2') 'ON'句を変更し、' = 'の代わりに' LIKE'演算子を使用して、 'table2'を取得するかもしれません。' '1 '' 'CONCAT('% '、' table1'.'one') – max

+0

。私は今、テーブル間の参照フィールドを持っていない。私はそれを作る。ありがとう! – joergi1988