簡體   English   中英

使用哪種類型的聯接?

[英]Which type of join to use?

我有一個名為PROJECT_CATEGORY的表,它包含兩個字段

cat_id和cat_title

我將cat_id存儲在另一個名為PROJECTS的表中,因此:

project_category.cat_id = projects.cat_id

使用MySQL運行查詢以顯示cat_title的最佳方法是什么? 換句話說,我想顯示名稱而不是表的ID號。 這項工作會:

SELECT * FROM projects INNER JOIN projects ON project_category.cat_id = projects.cat_id

然后調用它:

'.$row['cat_title'].'

有什么想法嗎?

如果每個項目都有一個有效的cat_id並且cat_id是唯一的,則INNER JOIN可以。

如果任何項目的NULL cat_id為NULL,則需要LEFT JOIN。

如果cat_id不是唯一字段(主鍵),則可能要使用子查詢將自己限制為每個項目一個結果。

盡量不要使用SELECT *,而是選擇所需的特定字段。 另外,如果您在查詢中使用多個表,請對其適當別名,以便可以根據需要提取值,而不會遇到歧義性問題。

無論如何,您可以嘗試以下方法:

SELECT       
 project_category.cat_title 
 ,projects.*  
FROM   
 projects   
  LEFT OUTER JOIN     
   project_category
    ON project_category.cat_id = projects.cat_id

您可以使用NATURAL JOIN

SELECT CAT_TITLE
FROM projects
NATURAL JOIN project_category

如果colunms是相同類型且不為null,則無需將字段放在聯接中,它將很好地工作。

SELECT
  projects.cat_id cat_id
FROM
  projects INNER JOIN
  project_category ON project_category.cat_id = projects.cat_id
SELECT cat_title 
FROM projects 
    INNER JOIN project_category ON project_category.cat_id = projects.cat_id

那應該工作。

您的加入看起來不錯。 FWIW,在這種情況下,我將使用USING子句。 它的工作原理相同,但是更加簡潔明了:

SELECT * FROM projects INNER JOIN project_category USING (cat_id);

如果您在$row關聯數組中找不到該列時遇到問題,我將檢查您的列定義的拼寫,包括大寫字母。 如果以這種方式聲明表:

CREATE TABLE `Project_Category` (
  `Cat_ID`    INTEGER NOT NULL,
  `Cat_Title` VARCHAR(20) NOT NULL
);

然后,結果集可以在數組鍵中使用該文字拼寫和大寫形式。 PHP數組鍵區分大小寫。

print $row['Cat_Title'];

您可能應該轉儲$row數組,以查看其認為的鍵是什么:

print_r($row);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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