说我有这样的查询:
SELECT * FROM my_table WHERE name = "john doe" AND phone = "8183321234" AND email = "johndoe@yahoo.com" AND address = "330 some lane";
但是说我只需要4个中的3个匹配,我知道我可以用几个OR写一个很长的查询,但我想知道是否有这个功能?
谢谢.
Tom*_*lak 19
SELECT
  * 
FROM 
  my_table 
WHERE 
  CASE WHEN name = "john doe"           THEN 1 ELSE 0 END +
  CASE WHEN phone = "8183321234"        THEN 1 ELSE 0 END +
  CASE WHEN email = "johndoe@yahoo.com" THEN 1 ELSE 0 END +
  CASE WHEN address = "330 some lane"   THEN 1 ELSE 0 END
  >= 3;
旁注:这很可能不会有效地使用索引.另一方面,无论如何,很可能在这些类型的列上没有索引.
cha*_*aos 15
神圣的过于复杂,蝙蝠侠.
SELECT * 
FROM my_table 
WHERE (
    (name = "john doe") +
    (phone = "8183321234") +
    (email = "johndoe@yahoo.com") +
    (address = "330 some lane")
) >= 3;
使用索引同样的事情:
SELECT  *
FROM    (
        SELECT  id
        FROM    (
                SELECT  id
                FROM    mytable _name
                WHERE   name = 'john doe'
                UNION ALL
                SELECT  id
                FROM    mytable _name
                WHERE   phone = '8183321234'
                UNION ALL
                SELECT  id
                FROM    mytable _name
                WHERE   email = "johndoe@yahoo.com"
                UNION ALL
                SELECT  id
                FROM    mytable _name
                WHERE   address = '330 some lane'
                ) q
        GROUP BY 
                id
        HAVING
                COUNT(*) >= 3
        ) di, mytable t
WHERE   t.id = di.id
有关性能详细信息,请参阅我博客中的条目.
| 归档时间: | 
 | 
| 查看次数: | 428 次 | 
| 最近记录: |