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;