在MySQL中,如何获得9个选择结果的交集?

时间:2014-02-19 14:41:22

标签: mysql sql

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

enter image description here 真的工作代码! 第2选择句子和霍乱以外的第1句子相同。霍乱是我的搜索词。 这样,我有9个选择句子。 我想得到交集,但在MySQL中,我该如何关心? 相交或减少只能用于2个句子。 (右?)

(第一句话) 相交 (第二选句) 相交 (第3选句) ... 这种方式是对的吗?

请帮帮我。 谢谢你的建议

1 个答案:

答案 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
      . . .