2014-02-21 38 views
2

這是有效的語法嗎?在明確命名錶格和列table.column時,似乎應該隱含from條款。mysql「where」不使用「from」

SELECT 
     distinct concat(\"Question \", q.place) as question 
    FROM q 
     INNER JOIN test 
      ON test.id = q.test 
      AND q.id NOT IN (
       SELECT responses.question 
       where //Is this Valid or do I need to select from a table explicitly? 
         responses.tester = tester.id) 
     INNER JOIN test 
      ON test.id = testingsession.test 
     INNER JOIN tester 
      ON tester.test = test.id 
WHERE 
     tester.id = :id 
ORDER BY 
     questions.position 
+1

那麼,它工作或產生錯誤? – Wiseguy

+0

指定表格有什麼問題? – Alexander

+0

這只是多餘的 –

回答

4

在MySQL中它是有效的有SELECT沒有FROM條款,但返回單排(類似於使用Oracle的特殊DUAL表),你不能使用WHERE條款。

在你的情況,SELECT查詢返回表中的值,所以你需要一個FROM子句來引用該表。

要回答你的問題,不,你有什麼是無效的。


注:

出於性能考慮,我會使用在NOT IN (correlated_subquery)的反連接模式。

有一個在語法幾個問題:

你必須引用兩次test表。至少有一個引用將被分配一個別名。您的查詢中沒有testingsession的行來源。

查詢引用ORDER BY子句中的questions.positions,但沒有questions行源。

+0

好的,謝謝。這是爲什麼?看起來這將是從表格中選擇行的非常直觀的方式。 –

+2

@CraigPatrickLafferty我認爲答案是在你的評論中,「從表中選擇行」。沒有'FROM'就沒有可供選擇的表格。 –

3

這是無效的!您不能使用FROM/JOIN零件(此處爲responses.tester)中未包含的表格中的列。你也必須加入responses

相關問題