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