在表上左联接。*作为别名?

时间:2019-12-16 14:50:24

标签: mysql

如何简单地将左联接的列值作为查询中的单独键返回?

SELECT meta.*
     , post.* as venue
     , venue_meta.* as venue_meta
  FROM $wpdb->postmeta as meta
  LEFT 
  JOIN $wpdb->posts as post 
    ON meta.meta_key = '_EventVenueID' 
   AND meta.meta_value = post.id
  LEFT 
  JOIN $wpdb->postmeta as venue_meta 
    ON venue_meta.post_id = venue.id
 WHERE meta.post_id = %d
 GROUP 
    BY meta.meta_id

所以我期望post表中的所有列都以$ response ['venue']的形式返回,但是第一行出现语法错误。

1 个答案:

答案 0 :(得分:0)

基本上,像post.* as venue这样的构造无效,并且会产生语法错误。

您可以为一个列名使用一个别名,例如post.id as id

但是您永远不会获得联接的嵌套结果。选择将检索行,该行由具有其值的列向量组成。

查询的缩写形式应该是

SELECT * FROM $wpdb->postmeta as meta LEFT JOIN $wpdb->posts as post ON meta.meta_key = '_EventVenueID' AND meta.meta_value = post.id LEFT JOIN $wpdb->postmeta as venue_meta ON venue_meta.post_id = venue.id WHERE meta.post_id = %d

这将为您提供一行中所有表的所有列(或PHP中的数组)。 为了将其拆分为子数组,结果集让您遍历结果集属性,例如列名和表名。这可能有助于以编程方式构建子阵列。