我有一個SQL查詢:在SQL查詢子句
SELECT NAME
FROM CATEGORY_LANGUAGE
WHERE
CATEGORY_ID IN (11, 22)
AND LANGUAGE_ID=1
在此查詢:
11 - > AA
22 - > BB
我想記錄要這樣返回:
AA
BB
當運行該查詢返回:
BB
AA
請,讓我知道進一步闡述我的問題。
我有一個SQL查詢:在SQL查詢子句
SELECT NAME
FROM CATEGORY_LANGUAGE
WHERE
CATEGORY_ID IN (11, 22)
AND LANGUAGE_ID=1
在此查詢:
11 - > AA
22 - > BB
我想記錄要這樣返回:
AA
BB
當運行該查詢返回:
BB
AA
請,讓我知道進一步闡述我的問題。
這裏是新的東西:
SELECT NAME
FROM CATEGORY_LANGUAGE
WHERE
CATEGORY_ID IN (11, 22)
AND LANGUAGE_ID=1
ORDER BY
field(CATEGORY_ID, 11, 22)
這是照顧到MySQL。只需確保field()
函數中的ID與in()
函數中的ID相同。
您閱讀我的評論,是嗎? – 2011-05-11 06:02:07
@Doc我們同時發佈:p是的,在 – 2011-05-11 06:03:10
之後所以,誰投票贊成,你知道這可能不是OP的解決方案之後? – 2011-05-11 06:05:48
SELECT
NAME
FROM
CATEGORY_LANGUAGE
WHERE
CATEGORY_ID IN (11, 22)
AND
LANGUAGE_ID=1
ORDER BY NAME ASC
也許這是一個順序問題
嗯,我不相信會工作(沒有專欄CATEGORY_LANGUAGE) – 2011-05-11 06:03:43
謝謝你@Doc。我錯過了 – Ibu 2011-05-11 06:04:53
,你錯過了我對OP問題的評論,我想?順便說一句,DESC將按降序排列輸出(bb在aa之前)。 – 2011-05-11 06:06:40
如果你總是希望通過CATEGORY_ID排序:
SELECT NAME
FROM CATEGORY_LANGUAGE
WHERE
CATEGORY_ID IN (11, 22)
AND LANGUAGE_ID=1
ORDER BY CATEGORY_ID
如果,另一方面,你總是希望有順序相同在你的IN-Clause中,我會使用某種INSTR()魔術(取決於你的RDBMS,這適用於Oracle;我爲了可讀性而放置連字符,並避免可能的錯誤,如果一個category_id是另一個的前綴):
SELECT NAME
FROM CATEGORY_LANGUAGE
WHERE
CATEGORY_ID IN (11, 22)
AND LANGUAGE_ID=1
ORDER BY INSTR('11-22', TO_CHAR(CATEGORY_ID));
說明:TO_CHAR()將CATEGORY_ID轉換爲字符串,並且INSTR()返回第一個字符串在第一個字符串中找到的索引 - 在這裏,我們使用它從'11-22中提取category_id的排序順序」。
的SQL代碼
CATEGORY_ID IN (11, 22)
只是語法糖
(CATEGORY_ID = 11 OR CATEGORY_ID = 22)
的SQL engien是免費的,以評估這些謂詞以任何順序是認爲合適的(提示:OR
是聯想)。
它可能看起來像一個集合,關係,表,元組,列表,袋等,但不是。
SQL只有一個數據結構:表。因此,將您的值放入臨時表的行(可能是CTE)。一張表沒有任何固有的排序,所以如果這是一個要求,你需要給出一個排序順序屬性。然後,您可以將登臺表JOIN
轉移到目標基表。
這裏的一些標準SQL作爲一個例子:
WITH STAGING (CATEGORY_ID, SORT_ORDER)
AS
(
SELECT CATEGORY_ID, SORT_ORDER
FROM (
VALUES (11, 0),
(22, 1)
) AS STAGING (CATEGORY_ID, SORT_ORDER)
)
SELECT C1.NAME, S1.SORT_ORDER
FROM CATEGORY_LANGUAGE AS C1
INNER JOIN STAGING AS S1
ON C1.CATEGORY_ID = S1.CATEGORY_ID
WHERE LANGUAGE_ID = 1
ORDER
BY SORT_ORDER;
我想我很困惑。它是否以錯誤的順序回來?如果是這樣,難道你不能只用一個ORDER BY來修復它嗎? – IAmTimCorey 2011-05-11 05:59:36
我假設你想要以與SQL中「IN元組」相同的方式排序結果,而不一定按字母順序排列? – 2011-05-11 06:00:09
@Doc Brown:「元組」? 'CATEGORY_ID IN(11,22)'僅僅是'(CATEGORY_ID = 11或CATEGORY_ID = 22)'的語法糖。你有沒有聽說過邏輯或關聯法? SQL引擎當然可以按照它認爲合適的順序自由評估這些引擎。什麼樣的元組被訂購? :) – onedaywhen 2011-05-11 07:28:16