【问题标题】:MySQL replace minus with left joinMySQL用左连接替换减号
【发布时间】:2018-08-20 13:48:34
【问题描述】:

我正在从 Oracle 迁移到 MySQL,目前坚持使用 MINUS 操作转换查询。我知道,我必须使用左连接,但不知何故,我的查询并没有像在 Oracle 中那样给出确切的行。查询非常简单,在视图“V_*”上进行选择。

在甲骨文上:

select s.section, c.title from course c, v_staff_active s
  minus
select section,title from v_rep_attended_by_section

在 Mysql 上,我将其转换如下:

select * from
( select s.section, c.title from course c, v_staff_active s) x
left join
( select section,title from v_rep_attended_by_section) y on x.section = y.section
where y.section is null;

但没有得到准确的结果或记录数。 你能帮帮我吗,因为我对 MySQL 非常陌生。

提前致谢。

【问题讨论】:

  • Minus 不能这样工作,您必须加入两个查询中的 all 列才能执行某些操作。此外,您的第一个查询似乎有一个交叉连接,这可能不是您想要的。我同意上面给出的@strawberry 评论。
  • 谢谢蒂姆和草莓,正如我所说,我在 mysql 方面不太好,我使用链接stackoverflow.com/questions/21009748/…中的以下示例将查询更改为 mysql
  • @vikit DISTINCT 不是一个函数,所以我要小心不要从那个答案中拿走太多
  • 谢谢 Strawbarry,你能给我一些重写代码的建议吗?

标签: mysql outer-join


【解决方案1】:

您的查询应如下所示:

select s.section, c.title 
  from course c
  left join v_staff_active s on c.section = s.section
                            and c.title = s.title
  where s.section is null and s.title is null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多