我的全外连接中的错误在哪里?

时间:2015-08-06 17:04:35

标签: mysql sql

我是SQL新手,我想知道我的语法或逻辑有什么问题。我有自己的表clients喜欢

id   |  name      |  postid  |  sord  |
--------------------------------------------------------
1       Paul Allen   19         1
2       McDermot     8          2    

并且该表中的postid列与id表中的wp_posts列相同,如

id | ... | ... |           guid            | ... 
--------------------------------------------------
1   ...    ...     images/somepic.jpg        ... 
.
.
8   ...    ...     images/mypic.gif          ... 
.
.
.
19   ...   ...     images/thatpic.png        ...
.
.
.

我想要返回的是一个像

这样的行表
id   |  name      |  postid  |  sord  |   guid 
--------------------------------------------------------
1       Paul Allen   19         1         images/mypic.gif
2       McDermot     8          2         images/thatpic.png

这样我就可以使用相应的图像路径来构建我的页面。我相信这种情况的方法是完全外连接。我的PHP就像

global $wpdb;
$allCients = $wpdb->get_results("
    SELECT clients.id, clients.name, clients.postid, clients.sord, wp_posts.guid 
    FROM clients 
    FULL OUTER JOIN wp_posts
    ON clients.postid=wp_posts.id
    ORDER BY clients.sord
");

$numClients = count($allCients);

但由于某种原因,返回0结果(即$numClients0)而不是预期的2.我做错了什么?

3 个答案:

答案 0 :(得分:1)

MySQL不支持Style。但如果你有适当的外键关系,你无论如何都不需要它。例如,如果您想要所有客户,即使是那些没有帖子的客户:

UITableViewCell

答案 1 :(得分:0)

如果你正在使用MySQL,则没有FULL OUTER JOIN。您可以做的是LEFT OUTER JOINUNIONRIGHT OUTER JOIN。这个堆栈溢出答案有一个例子:

https://stackoverflow.com/a/10137216/4629105

select * from A as a
    left outer join B as b on a.col = b.col
union
select * from A as a
    right outer join B as b on a.col = b.col

答案 2 :(得分:0)

在这种情况下,您甚至不需要LEFT JOIN

只需像其他提到的那样取出FULL OUTER

所以你的代码是:

global $wpdb;
$allCients = $wpdb->get_results("
    SELECT clients.id, clients.name, clients.postid, clients.sord, wp_posts.guid 
    FROM clients 
    JOIN wp_posts
    ON clients.postid=wp_posts.id
    ORDER BY clients.sord
");

$numClients = count($allCients);