2013-07-27 73 views
0

我讀過很多JOIN語法的例子,但沒有一個適用於我的問題。在INSTR上加入JOIN的SQL問題()

我有一個表報價和銷售表查詢。一個報價可能會導致多個查詢,或者可能不會導致任何查詢。我想創建一個所有引號的列表,幷包含任何結果查詢的詳細信息。我預計會有多個結果行,導致許多查詢。我期望有一行有空或空查詢字段,對於那些沒有引起任何詢問的報價。

連接數據位於引號表中,其中有一個名爲「活動」的字段,其中包含導致的任何或所有查詢的ID。重新查詢進來它的更新各添é

所以,我想這一點:

SELECT q.*, e.id, e.price 
FROM quotes as q 
LEFT JOIN enquiries as e 
ON INSTR(q.activity, e.id) >'0' 
WHERE q.date > '2013-07-01' 

但在我的成績每行包括查詢數據。我似乎無法讓它包含從未產生任何結果的引用。我認爲LEFT JOIN應該給我所有的報價,而不管詢問是什麼,並且在有匹配的地方包括查詢數據。但是我見過的每個例子都只是加入了a.id = b.id,所以我懷疑我的INSTR()匹配標準可能會讓事情變得糟糕。

+0

您的查詢看起來像它應該返回引號中的所有行。檢查完整的返回結果集,這些可能會在最後。此外,您可以刪除「0」周圍的單引號。而且,你在用什麼數據庫? –

+0

如果您要在一列中存儲多個外鍵值,這聽起來就像是您,您真的應該考慮一些關於規範化數據模型的內容。多值屬性是未來在關係模型中頭痛的祕訣。 – jpw

+0

我同意在一列中有多個鍵是不理想的。我會說目前的頭痛,而不是未來的頭痛!但這就是我現在所堅持的。戈登,你是什麼意思「..所有行退回引號」?我肯定沒有得到行e。id不在q.activity字段中。我只獲得INSTR條件爲true的行。幫幫我!有人幫忙! – AJDncnsn

回答

0

正如之前的評論家所說,這個問題將歸結爲Instr的加入。許多RDBMS的INSTR的返回值是一個整數值。因此,當你測試'0'的INSTR值時,你不會得到一個匹配。此外,如果Instr未找到匹配項,則可能會返回其他類似MS Access的內容,其中Null是可能的返回值。這顯然是所有的猜測,我們真的需要看到你的數據和問題的例子,以確認這是否是真正的問題。在沒有任何更多的信息,這是最好的,你會得到:

不知道哪個DB使用的是我已經包括了INSTR幾個環節:

MySql

Oracle

MS Access (returns variant Long)

SQL Server - No Instr Function - CharIndex

0

我認爲你的問題可能在其他地方,因爲這似乎對我來說很好。我認爲查詢的列表只是一個逗號分隔的字符串。請參閱http://sqlfiddle.com/#!4/71ce1/1

擺脫0附近的單引號,但這沒有任何區別。另外,你不應該依賴默認的日期格式,而是使用TO_DATE。你沒有說你正在使用什麼DBMS,但我嘗試了Oracle和MySQL。