有这两个表:
优惠:
-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”与零不同。
答案 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;。简而言之,由于这些关键因素,他们不会被退回。由于缺少。