2010-10-14 100 views
0

我正在使用MySQL的concat_ws函數從MySQL數據庫中獲取數據,並且工作正常。我通過這個SO Question發現了這個查詢。現在我有同樣的情況,但這次數據庫是SQL ServerSQL Server查詢問題?

又要求SQL服務器:

我有這樣的一個表:

id | roll_no | name 
--------------------- 
1 | 111 | Naveed 
2 | 222 | Adil 
3 | 333 | Ali 

如果我有這樣的數據:

$fields = array("id" , "roll_no")$values = array("1,111", "2,222");

這意味着我必須編寫一個sql查詢來從表中獲取記錄(id!= 1和roll_no!= 11 1)和(id!= 2和roll_no!= 222)。這意味着第3條記錄將被提取。

我有這樣的數據:

$fields = array("id")$values = array("2", "3");

這意味着我必須寫一個SQL查詢來從表那裏得到記錄和(ID = 3!)(ID = 2!)。這意味着第1條記錄將被提取。

如何使用上述兩個數據數組編寫一個通用的單一查詢來從表中獲取數據?

感謝

回答

2

你的問題不清楚我,但你到另一個SO問題提供的鏈接,並假設你只是想適應SQL服務器,我想你可以只更換

concat_ws (',', id, roll_no) 

通過

id + ',' + roll_no 
+0

其實我在我的PHP代碼中使用了這個查詢,其中**字段**和**值**通過變量傳遞。通過使用我的問題中提供的數據數組創建變量。我想知道一個最好的方法,它將創建字段和值字符串,以便它適合任何數量的字段和值的完美查詢。在我的鏈接的mysql問題中,通過使用concat_ws函數解決了相同的問題,但concat_ws函數在SQL Server中不可用。任何方式+1爲您的利益。 – NAVEED 2010-10-15 05:28:45

1

這是一個簡單的SQL。你知道'條款中的哪些(不)'嗎?

喜歡第一個,如果你有ID的1:1的關係,不滾,你可以簡單的寫

select * 
from table 
where id not in ('1','2') and roll_no not in ('111','222') 

對於第二個更容易。

+1

如果您發佈代碼或XML,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以精確地格式化和語法突出顯示它! – 2010-10-14 12:06:11

+0

是的,當您在查詢中對其進行硬編碼時,它很簡單。但是我必須在我的PHP代碼中使用這個查詢來獲取不同數量的字段和值。所以我想在我的代碼中對這個查詢進行一般化處理,以獲得任意數量的字段/值組合。我用mysql concat_ws函數提供的鏈接問題解決了同樣的問題。 – NAVEED 2010-10-15 05:35:02

+0

你可以用php寫查詢字符串,不是嗎?這是他需要的一個SQL。 concat_ws不是SQL,老兄! – Muktadir 2010-10-16 19:50:09