MySQL Select语法给我每个id输出两行有什么问题?

时间:2012-12-08 17:58:03

标签: mysql select phpmyadmin

表格结构: enter image description here

SELECT p.id id, p.type
    TYPE , v.provider provider, v.video_id video_id, NULL content, NULL url, NULL posted_by
    FROM post p
    INNER JOIN p_video v ON p.id = v.id
    AND p.type =  'video'
    UNION 
    SELECT p.id, p.type, NULL , NULL , t.content, NULL , NULL 
    FROM post p
    INNER JOIN p_text t ON p.id = t.id
    AND p.type =  'text'
    UNION 
    SELECT p.id, p.type, NULL , NULL , NULL , i.url, NULL 
    FROM post p
    INNER JOIN p_image i ON p.id = i.id
    AND p.type =  'image'
    UNION 
    SELECT p.id, p.type, NULL , NULL , NULL , l.url, NULL 
    FROM post p
    INNER JOIN p_link l ON p.id = l.id
    AND p.type =  'link'
    UNION 
    SELECT p.id, NULL , NULL , NULL , NULL , NULL , u.name
    FROM post p
    LEFT JOIN user u ON p.user_id = u.id
    ORDER BY id DESC 
    LIMIT 0 , 30

mySQL output

我的语法错误是什么?它只生成2行..但我希望所有输出分别为1行。

2 个答案:

答案 0 :(得分:1)

试试这个

SELECT p.id id, p.type
TYPE , v.provider provider, v.video_id video_id, NULL content, NULL url, u.name posted_by
FROM post p
LEFT JOIN user u ON p.user_id = u.id
INNER JOIN p_video v ON p.id = v.id
AND p.type =  'video'
UNION 
SELECT p.id, p.type, NULL , NULL , t.content, NULL , u.name
FROM post p
LEFT JOIN user u ON p.user_id = u.id
INNER JOIN p_text t ON p.id = t.id
AND p.type =  'text'
UNION 
SELECT p.id, p.type, NULL , NULL , NULL , i.url, u.name
FROM post p
LEFT JOIN user u ON p.user_id = u.id
INNER JOIN p_image i ON p.id = i.id
AND p.type =  'image'
UNION 
SELECT p.id, p.type, NULL , NULL , NULL , l.url, u.name
FROM post p
LEFT JOIN user u ON p.user_id = u.id
INNER JOIN p_link l ON p.id = l.id
AND p.type =  'link'
ORDER BY id DESC 
LIMIT 0 , 30

答案 1 :(得分:0)

这是你的最后一个联合选择,它增加了第二行。如果您希望每行都有它,请将左连接添加到每个联合选择部分,并省略最后一个联合选择

SELECT p.id id, p.type
TYPE , v.provider provider, v.video_id video_id, NULL content, NULL url, u.name posted_by
FROM post p
INNER JOIN p_video v ON p.id = v.id
AND p.type =  'video'
LEFT JOIN user u ON p.user_id = u.id
UNION 
SELECT ...
...
ORDER BY id DESC 
LIMIT 0 , 30
相关问题