我有2张桌子
SEQUENCES
-----------------
sequence (blob)
KNOWN_SEQUENCES
-----------------
sequence (blob)
我需要返回序列表中所有条目的列表,而Id喜欢返回一个布尔值,如果它在已知的表列表中
sequence known
----------------------------------
111423fa686ca 0
066787caf5671 1
答案 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