[英]SQL Query Assistance - Left join unexpected result
我有以下两个查询:
$sql = "SELECT *
FROM ultrait_wpl_properties
LEFT JOIN ultrait_wpl_property_types
ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id
ORDER BY ultrait_wpl_properties.id ";
$sql2 = "SELECT *
FROM ultrait_wpl_properties, ultrait_wpl_property_types
WHERE ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id
ORDER BY ultrait_wpl_properties.id";
由于某些奇怪的原因,当输出ID时有些重复? 通过我的重申,这些查询应该从第一部分的表中获取所有内容,并根据WHERE条件连接第二个表。
<property><id>13</id></property>
<property><id>6</id></property>
<property><id>6</id></property>
<property><id>6</id></property>
<property><id>6</id></property>
<property><id>7</id></property>
这可能还不太清楚,但是由于某种原因,我得到了重复的ID,我真正想要的只是能够访问链接到第二张表中ID的属性类型。
我已经在phpMyAdmin中测试了这两个查询,它们获得了所需的结果,但是当我在php脚本中使用查询时,它们返回了意外的结果。
在ultrait_wpl_property_types表具有单个属性的多个记录的情况下,您将得到笛卡尔结果。 例如,属性类型可以是Type A,Type B,Type C,它们可能是描述性的“类型”。 因此,将为每个条目考虑一个属性。
您可能只需要执行SELECT DISTINCT或GROUP BY ultrait_wpl_properties.id,以确保每个ID仅记录一条,但是对于通用的“ Select *”,我首先尝试使用GROUP BY。
您在表ultrait_wpl_properties中的每一行得到一行。 您还期望什么? 如果每种类型只有一条记录,则必须相应地重新编写查询。 您从两个表中选择*。 但这仅仅是您需要的类型ID吗? 那为什么要完全加入表格呢?
获取所有类型ID:
select id from ultrait_wpl_property_types;
获取表ultrait_wpl_properties中的所有类型ID:
select distinct property_type from ultrait_wpl_properties;
获取ultrait_wpl_properties中类型的所有类型数据:
select * from ultrait_wpl_property_types
where id in (select property_type from ultrait_wpl_properties);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.