我通常使用公共(public)列在两个表之间执行 JOIN,在本例中为“product_code”。
现在出现了这个没有连接的查询:
SELECT `rp_products`.`product_code`, `rp_log`.`customer_id`, `rp_products`.`product_name`
FROM rp_products, rp_log
WHERE (`rp_log`.`customer_id` = '111')
ORDER BY `rp_products`.`product_code` ASC, `rp_log`.`customer_id` ASC
返回:
product_code customer_id product_name
105 111 Paintballs 2000PBS
105 111 Paintballs 2000PBS
106 111 Gloves
106 111 Gloves
我想知道的是,它如何显示正确的“product_name”而不在表之间加入“product_code”? product_code 不是主键或类似的东西。 product_name 是表中两列的名称。
- rp_log 存储 customer_id、product_code 和购买日期(此处未显示)。
- rp_products 存储产品代码、价格(此处未显示)和产品名称。
感谢您的宝贵时间, 埃文。
最佳答案
您正在执行整个 rp_products
表和 rp_log
的子表的叉积,该子表的 customer_id
为 111。我猜你在 rp_log
中有两个 111 条目,在 rp_products
中有两个条目;然后连接中每个表(或子表)中的每个条目将与另一个表中的每个条目配对,以在结果集中生成四 (= 2 × 2) 行。
包括来自 rp_log
和 rp_products
的更多列可能会为您澄清一些事情。
关于MySQL知道公共(public)列,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291440/