MYSQL:连接键不同于零

时间:2017-10-02 13:13:46

标签: mysql

有这两个表:

优惠:

-id

-title

-id_sector1

-id_sector2

(这两个最后一个,是下表中的外键)

行业:

-id

-name

我想从商品表中选择数据,使用双联接。

SELECT offer.id
     , title
     , subtitle
     , description
     , identifier
     , coins
     , expiration_date
     , image_normal_url as image
     , image_mini_url as image_mini
     , sect1.name as 'sector1'
     , sect2.name as 'sector2'
     , cat.name as 'category'
     , sect3.name as 'suggested1'
     , sect4.name as 'suggested2'
     , zones_str as textzone
     , telephone
     , whatsappnumber
     , whatsapptext
     , fblink
     , chat
     , ChCustSource
  FROM offer
  LEFT 
  JOIN sector as sect1 
    ON sect1.id = offer.id_sector1
  LEFT 
  JOIN sector as sect2 
    ON sect2.id = offer.id_sector2 
   AND offer.id_sector2 is not null
  JOIN category as cat 
    ON cat.id = offer.id_category
  LEFT 
  JOIN sector as sect3 
    ON sect3.id = offer.id_suggested1
  LEFT 
  JOIN sector as sect4 
    ON sect4.id = offer.id_suggested2
 ORDER 
    BY offer.timestamp asc

第二个,在“id_sector2”上不选择商品表中“id_sector2”等于零的记录(因为当然,不会发现任何“sect2.id”等于零)。我想让它成为可选项,我尝试过:

left join sector as sect2 on sect2.id=offer.id_sector2 and not(offer.id_sector2 <=>0)

此外还有:

left join sector as sect2 on sect2.id=offer.id_sector2 and offer.id_sector2 !=0

但仍然无效。 我只得到“offer”表中的行,其中“id_sector2”与零不同。

2 个答案:

答案 0 :(得分:0)

如果您想要实际的扇区2并排除ID = 0,请更改

JOIN sector as sect2 
    ON sect2.id = offer.id_sector2 
   AND offer.id_sector2 is not null

LEFT JOIN sector as sect2 
    ON offer.id_sector2 = sect2.id
   AND offer.id_sector2 > 0

这样,你总是停留在LEFT-JOIN限定符上,但当且仅当扇区ID匹配且原始Offer表的扇区2 ID大于0.因此原始报价仍然符合条件,但它当ID不是0时,才会在扇区2中找到匹配。

<强>澄清

好的,我认为我得到你想要的东西......你在第一个表中有一堆链接到你的Sectors表的记录。并非所有记录都具有扇区2,因此如果不需要则为左连接。此外,某些记录的扇区ID可能为零(假设查找表中的ID = 0实际存在)。如果任何ID为零,您甚至不想看到商品记录,几乎就像您想要隐藏它一样。

如果这个SOUNDS准确,我会做以下......

LEFT JOIN sector as sect2 
    ON offer.id_sector2 = sect2.id

然后,在WHERE子句中,执行以下操作..

WHERE
      sect.id IS NULL
   OR sect.id > 0

这会得到你想要的吗?

答案 1 :(得分:0)

经过深入分析,我在表格中有三条记录&#34;提供&#34 ;, id_category等于&#34; 43&#34;或&#34; 42&#34;:表格的外键&#34;类别&#34;。

在桌面上进行联接&#34;类别&#34;无法找到任何主键等于&#34; 43&#34;或&#34; 42&#34;。简而言之,由于这些关键因素,他们不会被退回。由于缺少。