##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
来使用
Column: tp_id
作为其他表中Column: id
的标识符。
Column: user_id
作为用户的id
草稿。
Column: t
作为Tables: titles[t=1], posts[t=2]
表从中获取记录的标识符。
Table: posts
Column: tid
Column: id
Table: titles
Column: title
的{{1}}链接用于提取Table: titles
。
我希望Table: posts
中不显示任何记录(如果不存在),如果tid
上的标题与Table: titles
相关,则Table: posts
不会显示任何记录}}不存在或INNER JOIN
的记录不存在,这就是我使用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 scheme and design 用于两个不同的表的草稿表,而不是每个表一个?
我期望的结果是这样的
[table-a] [table-b]
[id - title ] [id - table_a_id - content ]
[1 - title-1] [1 - 1 - content-1]
一个简单的例子:
table-a
titles
有table-b
。content
各有title
个
table-b
。table_a_id
content
列将table-a
与 [table-ab]
[user_id - table_col_id - table_letter]
[1 - 1 - a ]
[1 - 1 - b ]
相关联
table-ab
。的标题
醇>
user_id
table-ab
有table_letter
告诉哪个用户会显示记录。table-ab
有table_letter = a
告诉查询从哪个表中获取数据。我希望Query做的是检查table-a
并根据它从其他表中获取数据,所以它将是
table_col_id = 1
=>从table-a
获取行。 id = 1
=>从result = title-1
WHERE table_letter = b
。 table-b
table_col_id = 1
=>从table-b
获取行。 id = 1
=>从result = title-1 - content-1
WHERE Final result:
id - title - content
-------------------------
1 - title-1 - null
2 - title-1 - content-1
。 db.store.setJSON("key", value); //to set value
db.store.getJSON("key"); //to get value
with_items
- "{{ monit_status_raw.stdout_lines }}"
答案 0 :(得分:1)
执行两个单独的查询(对于t = 1和t = 2)并使用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
来组合结果:
{{1}}
答案 1 :(得分:0)
当您使用内部联接时,请检查以下内容:
答案 2 :(得分:0)
加入条件d.t = 1
后,d.t = 2
没有数据这就是为什么在第二次加入后您没有获得任何数据的原因。请尝试以下查询
SELECT coalesce(p.title, t.title), p.content, p.version
FROM drafts d
INNER JOIN titles t
ON t.id = d.tp_id
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
WHERE user_id = 1
AND (d.t = 1 OR d.t = 2)
答案 3 :(得分:0)
这几乎可以产生你的问题。它确实省略了内容和版本的空值。不确定为什么会出现预期的输出。
SELECT
if(d.t = 1,tp.title, if(d.t = 2,t.title,"")) as `title`,
p.content,
p.version
FROM drafts d
LEFT JOIN titles t ON t.id = d.tp_id AND d.t = 2
LEFT JOIN posts p ON t.id = p.tid
LEFT JOIN titles tp ON tp.id = p.tid AND d.t = 1
WHERE user_id = 1 AND NOT p.content IS NULL
我更改了一些数据,特别是Content1组 - Content4。我添加了#34; a"到前4," b"剩下的。
这里有SQL Fiddle,显示了它的作用。