簡體   English   中英

SQL查詢協助-左聯接意外結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM