我正在制作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上捕获的图片。


真正有效的代码!
第二选择句与第一句相同,除了霍乱。霍乱是我的搜寻字词。
这样,我有9个精选句子。
我想得到交叉点,但是在MySQL中,我该如何护理?
相交或减号仅可使用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
      . . .

10-07 19:27
查看更多