mysql - 无法正确从两个表中选择记录

标签 mysql sql

我一直在用这个Query一开始,然后用了这个Query终于 哪些是

##Query[1]
SELECT t.title, p.content, p.version
FROM drafts d
INNER JOIN titles t ON t.id = d.tp_id AND d.t = 1
INNER JOIN posts p ON p.id = d.tp_id AND d.t = 2
WHERE user_id = 1

##Query[2]
SELECT coalesce(p.title, t.title), p.content, p.version
FROM drafts d
INNER JOIN titles t ON t.id = d.tp_id AND d.t = 1
INNER JOIN 
(
  SELECT pt.id, tp.title, pt.content, pt.version 
  FROM posts pt
  INNER JOIN titles tp ON tp.id = pt.tid
) p ON p.id = d.tp_id AND d.t = 2 
WHERE user_id = 1

我想要做什么使用Table:drafts来使用

  1. Column: tp_id 作为其他Column: id的标识符。

  2. 列:user_id 作为拥有草稿用户id

  3. Column: t 作为Tables:titles[t=1], posts[t=2] 中的表的标识符,从中获取记录它。

Table: posts中,Column:tid链接到Table:titlesColumn:id用于拉取Column: title

如果表:标题不存在,我希望不显示任何记录,并且如果标题相关,则表:帖子不显示任何记录在Table:titles上使用tid不存在或者Table:posts的记录不存在,这就是我使用的原因>内连接

但是在这两个查询中我根本没有得到任何结果。

这是否是正确的 table scheme and design 用于类似两个不同牌 table 的草稿 table ,而不是每个牌 table 一个

我期望的结果是这样的

title       content     version
TheTitle    null        null
TheTitle    Content1    1
TheTitle    Content2    2
TheTitle    Content3    3
TheTitle    Content4    4
TitleThe    Content1    1
TitleThe    Content2    2
TitleThe    Content3    3
TitleThe    Content4    4
<小时/>

一个简单的例子:

    [table-a]                                        [table-b]
[id   -   title  ]                          [id   -   table_a_id   -   content  ]
[1    -   title-1]                          [1    -   1            -   content-1]
  1. table-a 具有标题
  2. table-b 具有每个的内容 标题
  3. table_a_id
  4. table-b 列将 content 链接到 table-a 的标题。
<小时/>
                                    [table-ab]
                    [user_id   -   table_col_id   -   table_letter]
                    [1         -   1              -   a           ]
                    [1         -   1              -   b           ]
  1. table-abuser_id 来告诉哪个用户将显示记录。
  2. table-abtable_letter 告诉查询从哪个表中获取数据。
<小时/>

我希望查询做的是检查table-ab并根据它从其他表中获取数据,所以它会是

  1. table_letter = a => 从table-a 中获取行。
  2. table_col_id = 1 => 从 table-a WHERE id = 1 获取行。

结果 = title-1

<小时/>
  1. table_letter = b => 从table-b 中获取行。
  2. table_col_id = 1 => 从 table-b WHERE id = 1 获取行。

结果 = title-1 - content-1

<小时/>
Final result:
id -  title    -  content
-------------------------
1  -  title-1  -  null
2  -  title-1  -  content-1

最佳答案

执行两个单独的查询(对于 t=1 和 t=2)并使用 UNION ALL 组合结果:

SELECT t.title, null content , null version
FROM drafts d
INNER JOIN titles t
ON t.id = d.tp_id 
WHERE d.user_id = 1 and d.t = 1
UNION ALL
SELECT pt.title, pt.content, pt.version
FROM drafts d
INNER JOIN 
( SELECT p.id, t.title, p.content, p.version 
  FROM posts p
  INNER JOIN titles t ON t.id = p.tid ) pt
ON pt.id = d.tp_id AND d.t = 2
WHERE d.user_id = 1

关于mysql - 无法正确从两个表中选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611006/

相关文章:

mysql - 单个数据库查询中的多个 sql 更新

php - 转移到同数据库的其他表mysql,有些字段是手动插入的,但直接删除源数据

php - Foreach 改变行

php - 如果数据相同则显示一次

mysql - 如何在 Windows 操作系统中导入大型数据库并跟踪其进度

php - 如何通过php向wordpress提交帖子

mysql - 在我的数据库中搜索匹配/包含某些整个关键字的记录

sql - 获取SQL中两次之间的平均时间

mysql - 将 JOIN 限制为一个结果

sql - Powershell从txt文件中的查询调用-sqlcmd