我正在制作sql代码。我遇到了障碍,就是在SQL查询中选择了很多句子。最后,我想得到9个选择结果的交叉点
我的sql代码如下所示,只有1个选择句子。 8个选择句子不仅仅是搜索词,例如霍乱,腹泻,发烧,呕吐,恶心等等
首先选择句子。不要惊讶。这段代码简单而且重复。
(SELECT code_co.code, code_co.disease_co, code_en.disease_en
FROM code_co
LEFT JOIN code_en ON code_en.code = code_co.code
LEFT JOIN note ON note.code = code_co.code
LEFT JOIN inclusion ON inclusion.code = code_co.code
LEFT JOIN exclusion ON exclusion.code = code_co.code
LEFT JOIN ds ON code_co.code = ds.code
LEFT JOIN tx ON code_co.code = tx.code
LEFT JOIN sx ON code_co.code = sx.code
WHERE
note LIKE CONCAT( '%', (
SELECT ds_word.ds_en
FROM ds_word
WHERE ds_co LIKE '%cholera%'
LIMIT 0 , 1
), '%' )
or
ds_content LIKE CONCAT( '%', (
SELECT ds_word.ds_en
FROM ds_word
WHERE ds_co LIKE '%cholera%'
LIMIT 0 , 1
), '%' )
...
inclusion LIKE CONCAT( '%', (
SELECT ds_word.ds_en
FROM ds_word
WHERE ds_co LIKE '%cholera%'
LIMIT 0 , 1
), '%' )
)
以下是phpmyadmin上捕获的图片。
真的工作代码! 第2选择句子和霍乱以外的第1句子相同。霍乱是我的搜索词。 这样,我有9个选择句子。 我想得到交集,但在MySQL中,我该如何关心? 相交或减少只能用于2个句子。 (右?)
(第一句话) 相交 (第二选句) 相交 (第3选句) ... 这种方式是对的吗?
请帮帮我。 谢谢你的建议
答案 0 :(得分:2)
使用and
子句中的where
执行“交叉”。使用or
相当于“联合”。
此外,您可以通过以下方式简化表达:
LEFT JOIN sx ON code_co.code = sx.code
CROSS JOIN (SELECT concat('%', ds_word.ds_en, '%') as pattern
FROM ds_word
WHERE ds_co LIKE '%cholera%'
LIMIT 0 , 1
) const
WHERE note LIKE const.pattern and
ds_content like const.pattern and
. . .