7

私はクエリを持っています:

SELECT * FROM `users` 
WHERE (`firstname` LIKE 'Luke' AND `lastname` LIKE 'Skywalker') OR  
 (`firstname` LIKE 'Foo' AND `lastname` LIKE 'Bar') OR 
(`firstname` LIKE 'Tom' AND `lastname` LIKE 'Turner');

しかし、where ... in ...を使用して、もう少し読みやすくしたいと思います

SELECT * FROM users 
WHERE `firstname` 
    IN ('Luke','Foo','Tom') AND `lastname` IN ('Skywalker','Bar','Turner');

しかし残念なことに、これも と一致"Tom Skywalker"し、"Foo Turner"考えられるすべての組み合わせになります。

外部 API からデータを取得しているため、名前と姓 (おそらく DOB などのフィールド) を選択する必要があり、それらの名前がシステムにあるかどうかを確認する必要があります。

4

3 に答える 3

4
SELECT * 
FROM users
WHERE (firstname, lastname) 
      IN ( ('Luke', 'Skywalker') 
         , ('Foo' , 'Bar') 
         , ('Tom' , 'Turner')
         )
;
于 2012-04-11T17:54:13.220 に答える
4

ワイルドカードなしで演算子を使用LIKEしても、あまり意味がありません。=特に必要な場合は、を使用する必要があると思いますcheck if those names are in our system

SELECT * FROM users
WHERE (firstname = 'Luke' AND lastname = 'Skywalker') OR 
      (firstname = 'Foo' AND lastname = 'Bar') OR 
      (firstname = 'Tom' AND lastname = 'Turner')

INあなたが言ったように、演算子を使用する場合、さまざまな組み合わせに一致します。前の例がそれらを比較する最も速い方法であるはずだと思います。

于 2012-04-11T17:49:12.980 に答える
3

あなたはそれらを組み合わせることができますconcat

WHERE concat(`firstname`,'-',`lastname`)
   IN ('Luke-Skywalker', 'Foo-Bar', 'Tom-Turner');
于 2012-04-11T17:47:21.297 に答える