簡體   English   中英

有沒有更好的方法可以在此SELECT語句中構造嵌入式SELECT語句?

[英]Is there a better way to structure the embedded SELECT Statement within this SELECT Statement?

在下面的MySQL代碼段中,我在單個SELECT語句中使用兩個嵌入式SELECT語句從我的數據庫返回一些信息。 它當前可以正常工作,但是我不確定兩個嵌入式SELECT語句是否被正確利用。

SELECT
  E.ID AS DEBATE_GROUPS_ID,
  A.TITLE AS STARTER_PACK_TITLE,
  B.TITLE AS UNITS_TITLE,
  B.UNIT_CODE AS UNITS_CODE,
  (SELECT FIRST_NAME FROM USERS WHERE ID = A.ACADEMIC_ID) AS ACADEMIC_FIRSTNAME, 
  (SELECT LAST_NAME FROM USERS WHERE ID = A.ACADEMIC_ID) AS ACADEMIC_LASTNAME,
  D.DATE_DUE AS DEBATES_DUE_DATE
FROM
  STARTER_PACKS A,
  UNITS B,
  USERS C,
  DEBATES D,
  DEBATE_GROUPS E
WHERE
  D.ID = E.DEBATE_ID AND E.STUDENT_ID = C.ID AND C.ID = 12

因此,我的問題是...

我對嵌入式SELECT語句的處理是否正確,或者在提高效率或可讀性方面有更好的選擇嗎?

是的,使用JOIN ,盡管您的查詢似乎完全錯誤,但是您幾乎沒有任何連接條件!

SELECT
  E.ID AS DEBATE_GROUPS_ID,
  A.TITLE AS STARTER_PACK_TITLE,
  B.TITLE AS UNITS_TITLE,
  B.UNIT_CODE AS UNITS_CODE,
  C.FIRSTNAME AS ACADEMIC_FIRSTNAME, 
  C.LASTNAME AS ACADEMIC_LASTNAME,
  D.DATE_DUE AS DEBATES_DUE_DATE
FROM
  STARTER_PACKS A
  INNER JOIN UNITS B ON(a.Column = B.Column)
  INNER JOIN USERS C ON(C.ID = A.ACADEMIC_ID)
  INNER JOIN DEBATES D ON (SomeColumn = D.Column)
  INNER JOIN DEBATE_GROUPS E ON(D.ID = E.DEBATE_ID AND E.STUDENT_ID = C.ID)
WHERE
  C.ID = 12

請使用顯式聯接的正確語法,這將幫助您避免此類問題。 將這些行替換為實際的列關系:

  INNER JOIN UNITS B ON(a.Column = B.Column)
  INNER JOIN DEBATES D ON (SomeColumn = D.Column)

目前尚不清楚此查詢的目的是什么,但是對於我所看到的,您可以替換

(SELECT FIRST_NAME FROM USERS WHERE ID = A.ACADEMIC_ID) AS ACADEMIC_FIRSTNAME

with C.FIRST_NAME AS ACADEMIC_FIRSTNAME 

and

(SELECT LAST_NAME FROM USERS WHERE ID = A.ACADEMIC_ID) AS ACADEMIC_LASTNAME 

with C.LAST_NAME AS ACADEMIC_LASTNAME

add also a where clause to join USERS and STARTER_PACKS tables `AND C.ID = A.ACADEMIC_ID

希望能幫助到你。 西蒙娜

暫無
暫無

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

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