从两个表中获取数据

nimxete2  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(282)

我有一个关于加入的问题。基本上有两个表产品和产品。表产品\u boost具有 product_id 作为外键,它也在产品表中。
我想使用join来获取数据,join在两个表中都是可用的,如果不是,那么只有来自第一个表的数据才会出现。
我使用的是右外连接,这是我的查询

SELECT * FROM `vefinder_product` 
RIGHT OUTER JOIN `vefinder_product_boost` ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` 
WHERE `vefinder_product`.`status` = 1 
  AND `vefinder_product`.`post_type` != 5 
  AND `vefinder_product`.`country` IN('348') 
  AND `vefinder_product`.`product_stock` >0 
  AND `vefinder_product`.`product_in_stock` = 1 
  AND `vefinder_product_boost`.`target_age_from` >= 20 
  AND `vefinder_product_boost`.`target_age_to` <= 40  
ORDER BY `vefinder_product`.`is_boosted` DESC, 
         `vefinder_product`.`is_sponsered` DESC, 
         `vefinder_product`.`created_date` DESC LIMIT 21

我怎样才能得到想要的东西,因为这是行不通的。我正在使用codeigniter php。

5vf7fwbs

5vf7fwbs1#

使用 Left join 相反,如果您想从第一个(最左边的)表中获取所有数据。
任何 Where 除第一个表(最左边)以外的表上的条件应移到 ON 条件 Left Join . 否则, Where 也会过滤掉不匹配的行( null 在右边的table上)。
请尝试以下操作:

SELECT * 
FROM `vefinder_product` 
LEFT OUTER JOIN `vefinder_product_boost` 
  ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` AND 
     `vefinder_product_boost`.`target_age_from` >= 20 AND 
     `vefinder_product_boost`.`target_age_to` <= 40 
WHERE `vefinder_product`.`status` = 1 AND 
      `vefinder_product`.`post_type` != 5 AND 
      `vefinder_product`.`country` IN('348') AND 
      `vefinder_product`.`product_stock` >0 AND 
      `vefinder_product`.`product_in_stock` = 1 
ORDER BY `vefinder_product`.`is_boosted` DESC, 
         `vefinder_product`.`is_sponsered` DESC, 
         `vefinder_product`.`created_date` DESC 
LIMIT 21
gcuhipw9

gcuhipw92#

您可以使用第三方软件,如sqlyog。连接查询非常简单,只需使用ui构建查询并为表之间的字段分配关系即可。在sqlyog中,您可以从多个表(而不仅仅是两个表)获取数据。因为我现在使用这个软件是为了节省时间。

t2a7ltrp

t2a7ltrp3#

使用左连接并将where条件放在cluase上

SELECT * FROM `vefinder_product` 
left OUTER JOIN `vefinder_product_boost` ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` 
  and `vefinder_product`.`status` = 1 
  AND `vefinder_product`.`post_type` != 5 
  AND `vefinder_product`.`country` IN('348') 
  AND `vefinder_product`.`product_stock` >0 
  AND `vefinder_product`.`product_in_stock` = 1 
  AND `vefinder_product_boost`.`target_age_from` >= 20 
  AND `vefinder_product_boost`.`target_age_to` <= 40  
ORDER BY `vefinder_product`.`is_boosted` DESC, 
         `vefinder_product`.`is_sponsered` DESC, 
         `vefinder_product`.`created_date` DESC LIMIT 21

相关问题