Sql совпадения с идентификатором в другой таблице и присоединиться - PullRequest
0 голосов
/ 03 сентября 2018

Идентификационные поля в article, tweet являются внешними ключами для 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, результат будет col от 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 | 

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Вот запрос, который вы можете попробовать ..

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)

Надеюсь, это вам помогло.

0 голосов
/ 03 сентября 2018

Вы должны иметь возможность использовать UNION, так как только один из SELECT вернет строку для данного идентификатора

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   
0 голосов
/ 03 сентября 2018

Если я правильно понимаю, это может быть после 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 = ?;

(Замените ? идентификатором поста, который вы хотите запросить.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...