我想把两张table连在一起两次。一个有不同的行,另一个时间有不同的行,但我得到下面的错误,
# 1054 - Unknown column 'p1.ID' in 'on clause'
mysql数据库:
SELECT p1.ID, p1.post_title, p1.post_excerpt, p2.meta_value, p1.guid, p4.guid
FROM wp_posts AS p1, wp_postmeta AS p3
INNER JOIN wp_postmeta p2
ON p1.ID = p2.post_id
AND p2.meta_key = '_price'
AND p1.post_type = 'product'
AND p1.post_status = 'publish'
INNER JOIN wp_posts p4
ON p4.ID = p3.post_id
AND p3.meta_key = '_thumbnail_id'
AND p4.post_type = 'attachment'
编辑:下面是我在回答后的查询,但它给了我一个空表。
SELECT p1.ID, p1.post_title, p1.post_excerpt, p2.meta_value, p1.guid, p3.guid
FROM wp_posts p1
JOIN wp_postmeta p2
ON p1.ID = p2.post_id AND
p2.meta_key = '_price' AND
p1.post_type = 'product' AND
p1.post_status = 'publish'
JOIN wp_posts p3
ON p3.ID = p2.post_id AND
p2.meta_key = '_thumbnail_id'
JOIN wp_postmeta p4
ON p4.post_id = p3.ID AND
p3.post_type = 'attachment';
2条答案
按热度按时间j2cgzkjk1#
1054-“on子句”中的未知列“p1.id”
根据连接语法文档:
join的优先级高于逗号运算符(,),因此join表达式t1,t2 join t3被解释为(t1,(t2 join t3)),而不是((t1,t2)join t3)。这会影响使用on子句的语句,因为该子句只能引用联接操作数中的列,并且优先级会影响对这些操作数的解释。
例子:
联接优先于逗号运算符,因此on子句的操作数是t2和t3。由于t1.i1不是任一操作数中的列,因此结果是“on子句”错误中的未知列“t1.i1”。
因此,相应地更改join子句并构建sql语句。
koaltpgm2#
不要在句子中使用逗号
FROM
条款。始终使用显式JOIN
语法。你的问题是一个范围问题,很容易解决。当你这么做的时候,你会注意到
p3
似乎缺少连接条件id
或者post_id
. 这是所需查询的结构: