内部联接未按预期给出结果

时间:2016-10-09 10:08:41

标签: mysql

Product_table

enter image description here

Product_table_link

enter image description here

enter image description here

这是存储在数据库中的product_table数据。

enter image description here

这是DB中存在的product_table_link数据。我试图将这两个表加入product code=something。例如,让我们将xyz作为产品。< / p>

我希望得到两者的综合结果而不存在任何空值。

我试过了:

SELECT s1.* FROM (SELECT p1.* FROM product_table p1 INNER JOIN product_table_link p2 
ON p1.product_code=p2.product_code ) s1 WHERE product_code="xyz"

但结果不是两个表的组合,而是向我显示product_table

CREATE TABLE `product_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(60) NOT NULL,
  `product_code` varchar(60) NOT NULL,
  `product_description` text,
  `product_type` varchar(20) NOT NULL,
  `product_image_path` varchar(60) NOT NULL,
  `product_company_name` varchar(20) NOT NULL,
  `product_company_id` varchar(60) NOT NULL,
  `product_landing_page` varchar(15) NOT NULL,
  `product_shape` varchar(20) DEFAULT NULL,
  `product_flavour` varchar(20) NOT NULL,
  `product_veg_mark` varchar(8) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique` (`product_code`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

CREATE TABLE `product_table_link` (
  `product_code` varchar(60) NOT NULL,
  `product_weight` varchar(5) NOT NULL,
  `product_price` int(5) NOT NULL,
  `product_quantity` int(5) NOT NULL,
  PRIMARY KEY (`product_code`,`product_weight`),
  CONSTRAINT `product_table_link_ibfk_1` FOREIGN KEY (`product_code`) REFERENCES `product_table` (`product_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

如何获得两个表的组合结果?

2 个答案:

答案 0 :(得分:1)

将子查询更改为此

SELECT * FROM product_table p1 INNER JOIN product_table_link p2 
ON p1.product_code=p2.product_code

您只是从p1中选择。

您正在执行select p1.*,它只会从p1中选择行。内部联接意味着您希望根据某些条件从不同的表中选择行。您需要执行select *,它将选择从连接条件中过滤掉的所有行。

简化的最终查询。

SELECT s1.* FROM (SELECT p1.*,p2.product_weight,p2.product_price,p2.product_quantity 
FROM product_table p1 INNER JOIN product_table_link p2 
ON p1.product_code=p2.product_code) 
    s1 WHERE s1.product_code="xyz"

答案 1 :(得分:0)

SELECT p1.* FROM product_table p1 INNER JOIN product_table_link p2 
ON p1.product_code=p2.product_code 

在上面的子查询中,您只从p1中选择值。因此,您必须将查询更改为FallAndLearn编写的内容。

相关问题