Mysql 如果字符串与列表中的一个匹配,则返回布尔值

Mysql 如果字符串与列表中的一个匹配,则返回布尔值,mysql,mysqli,Mysql,Mysqli,我有两张桌子 SEQUENCES ----------------- sequence (blob) KNOWN_SEQUENCES ----------------- sequence (blob) 我需要返回序列表中所有条目的列表,如果它在已知的表列表中,我想返回一个布尔值 sequence known ---------------------------------- 111423fa686ca 0 066787caf5671

我有两张桌子

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


KNOWN_SEQUENCES
-----------------
sequence (blob)
我需要返回序列表中所有条目的列表,如果它在已知的表列表中,我想返回一个布尔值

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

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

  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
   )

我确实让它工作了,但只需要3秒钟就可以录制9000条记录。这可能是我能做的最好的了。幸运的是,我只需要运行一次

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

请参阅mysql中“CASE”的用法

我在这里张贴样品。很抱歉,我现在没有访问sql server的权限来测试这个。试着看看这样做是否有帮助

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;
此外,在“sequence”列上为表“KNOWN_SEQUENCES”编制索引可能会更好地考虑性能


希望这能有所帮助。

这太接近了。由于某种原因,已知的结果会出现两次,一次是已知的,一次是未知的。那些不知道的,只展示一次。
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;