SQL查询帮助 - 左连接意外结果

时间:2014-12-16 14:19:28

标签: mysql

我有这两个查询:

$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脚本中使用查询时,它们会返回意外的结果。

2 个答案:

答案 0 :(得分:0)

如果ultrait_wpl_property_types表具有单个属性的多个记录,则会收到笛卡尔结果。例如属性类型可以是类型A,类型B,类型C,其可以是描述性“类型”。因此,每个条目都会考虑一个属性。

您可能只需要执行SELECT DISTINCT或GROUP BY ultrait_wpl_properties.id以确保每个ID只有一条记录,但是使用通用的“Select *”,我会先尝试使用GROUP BY。

答案 1 :(得分:0)

表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);