如果string匹配列表MYSQL之一,则返回一个布尔值

时间:2011-02-17 21:19:07

标签: mysql mysqli

我有2张桌子

SEQUENCES
-----------------
sequence (blob)


KNOWN_SEQUENCES
-----------------
sequence (blob)

我需要返回序列表中所有条目的列表,而Id喜欢返回一个布尔值,如果它在已知的表列表中

sequence            known
----------------------------------
111423fa686ca          0
066787caf5671          1

3 个答案:

答案 0 :(得分:1)

请参阅在mysql中使用'CASE'。 http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

我在这里发布样本。对不起,我现在没有权限访问SQL服务器来测试这个。试着看看这样的事情是否有帮助。

Select s.sequence,
    CASE 
        WHEN (select count(*) from KNOWN_SEQUENCES k where k.sequence = s.sequence) > 0 THEN '1'
        ESLE '0'
    END 
    `known`,
from SEQUENCES s;

此外,在“序列”列上索引“KNOWN_SEQUENCES”表可能会更好地记住性能。

希望这有帮助。

答案 1 :(得分:0)

这可能有点长,但应该有效。

  SELECT
      s.*,
      1 as `known`
    FROM
      sequence AS s
    INNER JOIN
      known_sequences AS ks
    ON
      s.sequence = ks.sequence
UNION
   SELECT
      s.sequence,
      0 AS `known`
   FROM
      sequence AS s
   WHERE
     s.sequence NOT IN
   (
   SELECT
      s2.sequence
    FROM
      sequence AS s2
    LEFT JOIN
      known_sequences AS ks
    ON
      s.sequence == ks.sequence
   )

答案 2 :(得分:0)

我确实让它工作,但只有9,000条记录需要3秒钟。这可能是我能做的最好的事情。幸运的是我只需要运行一次。

SELECT
  sequences.*,
  1 as `known`
FROM
  sequences, known_sequences
WHERE sequences.sequence = known_sequences.sequence
UNION
 SELECT
  sequences.*,
  0 as `known`
FROM
  sequences, known_sequences
WHERE sequences.sequence NOT IN(
SELECT known_sequences.sequence
FROM known_sequences) GROUP BY sequences.id