article
,tweet
中的ID字段是posts.post_id
的外键。
在MySQL中,我想查询例如post_id=2
。
如何从表posts + tweet
中获得所需的结果(因为id=2
仅存在于tweet
表中)
post_id | author | created_at .... | tweet_id | message | ... all cols from tweet
2 | B | ........... | 2 | Hello world | ...
查询post_id=1
时,结果将为posts + article
的列
post_id | author | created_at.... | article_id | title | ... all cols from article
1 | A .............. | A | ...
感谢您的帮助。
数据库提琴:http://sqlfiddle.com/#!9/be4f302/21
| post_id | author | created_at, modified_at....
|---------|--------|-----------
| 1 | A | ...
| 2 | B | ...
| 3 | C | ...
| 4 | D | ...
| 5 | E | ...
| article_id | title | ...
|------------|-------|----
| 1 | A |
| 3 | B |
| tweet_id | message | ...
|----------|-------------|---
| 2 | Hello World |
答案 0 :(得分:0)
如果我了解这项权利,那么您可能在LEFT JOIN
和coalesce()
之后。
SELECT p.*,
coalesce(a.article_id, t.tweet_id) article_id_or_tweet_id,
coalesce(a.title, t.message) article_title_or_tweet_message
FROM posts p
LEFT JOIN article a
ON a.article_id = p.post_id
LEFT JOIN tweet t
ON t.tweet_id = p.post_id
WHERE p.post_id = ?;
(将?
替换为您要查询的帖子的ID。)
答案 1 :(得分:0)
这是您可以尝试的查询。
SELECT P.*, A.title, T.message
FROM posts P
LEFT JOIN article A ON (P.post_id = A.article_id)
LEFT JOIN tweet T ON (T.tweet_id = P.post_id)
希望这对您有所帮助。
答案 2 :(得分:0)
您应该能够使用UNION,因为只有SELECT之一会返回给定ID的行
SELECT p.*, a.title as 'post'
FROM posts p
JOIN article a ON p.post_id = a.article_id
WHERE p.post_id = 2
UNION
SELECT p.*, m.message as 'post'
FROM posts p
JOIN tweet t ON p.post_id = t.tweet_id
WHERE p.post_id = 2