首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空表中的左联接返回MySQL中的错误

空表中的左联接返回MySQL中的错误
EN

Stack Overflow用户
提问于 2019-11-07 13:46:45
回答 1查看 71关注 0票数 0

所以我的数据库里有几张桌子。假设我有

代码语言:javascript
复制
CREATE TABLE ARTICLE (
  id INT NOT NULL IDENTITY PRIMARY KEY,
  time_stamp BIGINT(20) NOT NULL UNIQUE,
  body TEXT NOT NULL,
  title VARCHAR(255),
  web_address VARCHAR(255) NOT NULL UNIQUE
);

代码语言:javascript
复制
CREATE TABLE BLOG (
  id INT NOT NULL IDENTITY PRIMARY KEY,
  time_stamp BIGINT(20) NOT NULL UNIQUE,
  body TEXT NOT NULL,
  title VARCHAR(255) NOT NULL UNIQUE
);

代码语言:javascript
复制
CREATE TABLE LINKTABLE (
  id INT NOT NULL IDENTITY PRIMARY KEY,
  parent_id INT,
  quote_id INT,
  article_id INT,
  blog_id INT,
  FOREIGN KEY (parent_id) REFERENCES Blog(id)     
    ON DELETE CASCADE, 
  FOREIGN KEY (blog_id) REFERENCES Blog(id)       
    ON DELETE CASCADE, 
  FOREIGN KEY (article_id) REFERENCES Article(id)
    ON DELETE CASCADE, 
  FOREIGN KEY (quote_id) REFERENCES Quote(id)
    ON DELETE CASCADE
);

现在,如果我有以下命令:

代码语言:javascript
复制
SELECT b.id as blog_id, l.blog_id as linktable_blog_id, l.id as linktable_id
  FROM linktable l
    LEFT JOIN blog b ON 
      (l.blog_id=b.id OR l.parent_id=b.id)

在链接表和博客中存在满足约束条件的条目时,如我所期望的那样,返回如下:

代码语言:javascript
复制
{"blog_id":1,"linktable_blog_id":1,"linktable_id":1}

,不过,假设我有

代码语言:javascript
复制
  SELECT a.id as article_id, b.id as blog_id, l.blog_id as linktable_blog_id, l.id as linktable_id
  FROM linktable l
    LEFT JOIN blog b ON 
      (l.blog_id=b.id OR l.parent_id=b.id)
    LEFT JOIN article a ON 
      l.article_id=a.id

在链接表中既没有文章也没有条目的地方,我会被退回。

代码语言:javascript
复制
{}//empty

我想要做的是

代码语言:javascript
复制
{"blog_id":1,"linktable_blog_id":1,"linktable_id":1, "article_id": null}

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-07 13:48:49

如果您想保留所有博客,那么blog需要成为LEFT JOIN中的第一个表。

代码语言:javascript
复制
SELECT a.id as article_id, b.id as blog_id,
       l.blog_id as linktable_blog_id, l.id as linktable_id
FROM blog b LEFT JOIN
     linktable l
     ON l.blog_id = b.id OR l.parent_id = b.id LEFT JOIN
     article a 
     ON l.article_id = a.id;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58750118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档