【问题标题】:In MySQL, How can get the intersection of the 9 select results?在 MySQL 中,如何获得 9 个选择结果的交集?
【发布时间】:2014-02-19 14:41:21
【问题描述】:

我正在编写 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 个句子中使用。 (对吧?)

(第一个选择句子) 相交 (第二个选择句子) 相交 (第三选择句) ... 这种方式对吗?

请帮助我。 谢谢你的建议

【问题讨论】:

  • 这听起来像是一个糟糕的、非执行的方法。你需要一个解析器/索引器,而不是 SQL。

标签: mysql sql


【解决方案1】:

您可以通过在 where 子句中使用 and 来执行“相交”。使用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
      . . .

【讨论】:

  • 戈登,感谢您的明智代码。由于您的交叉加入代码,我大大减少了我的代码。
  • intersect 是作用于子查询结果的关键字(例如unionunion all)。它不在where 子句中。
猜你喜欢
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2015-03-18
  • 1970-01-01
相关资源
最近更新 更多