当前位置: 首页 > 面试题库 >

MySQL的减号?

范承志
2023-03-14
问题内容

我有topic(id )和tags(id ,name)和一个链接表topic_tags(topicFk ,tagFk )。

现在,我想选择每个具有所有良好标记(a,b,c)但没有不良标记(d,e,f)的主题。

我怎么做?


问题答案:

我自己的解决方案使用了Pauls和Bills的想法。

这个想法是将具有良好标签的主题进行内部联接(以抛出没有良好标签的主题),然后为每个主题计数唯一的标签(以验证是否存在所有良好的标签)。

同时,带有错误标签的外部联接不应具有单个匹配项(所有字段均为NULL)。

SELECT topics.id
FROM topics
  INNER JOIN topic_tags topic_ptags
    ON topics.id = topic_ptags.topicFk
  INNER JOIN tags ptags
    ON topic_ptags.tagFk = ptags.id
      AND ptags.name IN ('a','b','c')
  LEFT JOIN topic_tags topic_ntags
    ON topics.id = topic_ntags.topicFk
  LEFT JOIN tags ntags
    ON topic_ntags.tagFk = ntags.id
      AND ntags.name IN ('d','e','f')
GROUP BY topics.id
HAVING count(DISTINCT ptags.id) = 3
  AND count(ntags.id) = 0


 类似资料:
  • 问题内容: 我遇到了一个非常非常非常奇怪的mysql问题。 我有一个主键“ id”。设置为自动递增。问题是,第一个条目从“ 3”开始。并且每个新条目增加5,因此下一个条目的ID为8,下一个为13,然后为18,依此类推。真傻 为什么它不像应该的那样仅增加1?为什么从3开始呢??? 我缺少某处的设置吗?我正在使用phpmyadmin,如果有帮助。 问题答案: 有应该是一个my.cnf配置: 。它用于主

  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像:

  • 问题内容: 我在两个不同的表中有价格,想将它们相减(当前价格-当天价格)并以DESC形式订购它们。我想知道是否可以使用单个MySQL命令来完成。 表结构 问题答案: 除了我使用LEFT JOIN的方式外,此查询没有什么特别的。我相信,如果无法提供昨天的记录价格,则最后三列将包含NULL。输出:

  • 问题内容: 我得到一个datetime字段,当前在查询中为: 我想做的是从该日期减去3个小时(格林尼治标准时间问题),但是我无法在PHP中执行此操作,因为PHP仅知道日期部分,而不是时间。 问题答案: MySQL具有: 但是尝试解决潜在的时区问题会更好吗?

  • 我有一个todo列表存储在mysql数据库中,存储的列是todoTitle和todoDate,当我将todoDate打印到屏幕上时,你可以在下面的代码中看到,它将显示日期递减一天,例如,如果数据库中的日期显示为2016-12-20,在我的网站上它将显示为2016-12-19。 如果你想知道为什么todoDate会变成string,然后变成substring,那是因为如果我不这么做,它会像这样打印出

  • 问题内容: MySQL文档说: 假设B树索引,表的大小会减慢日志N的索引插入速度。 这是否意味着对于每个新行的插入,插入速度将降低log N倍,其中N是行数?即使我只在一个查询中插入所有行?即: 其中n为〜70,000 我目前在一个表格中约有147万行,其结构如下: 当我以上述方式插入事务时,提交时间约为275秒。我该如何优化这一点,因为每天都会添加新数据,并且插入时间只会继续变慢。 此外,除了查