我正在構造一個查詢,它自然會返回具有多個列的值的結果,以及一些整數值分組列(指示某個特定值列是否小計,但這本身並不與我的問題相關)。我想對這個查詢的分組列進行約束,只接受那些分組列n非零的行,如果所有分組列1 - (n -1)也非零。SQL中多列「級聯」約束的優雅語法?
好像有應該是在SQL表達這種一個很好的方式,但所有我能想出迄今已是相當麻煩的
where ((grp1 = 0 AND grp2 = 0 AND grp3 = 0 AND ... AND grpn = 0)
or (grp1 = 1 AND grp2 = 0 AND grp3 = 0 AND ... AND grpn = 0)
or (grp1 = 1 AND grp2 = 1 AND grp3 = 0 AND ... AND grpn = 0)
...
or (grp1 = 1 AND grp2 = 1 AND grp3 = 1 AND ... AND grpn = 1)
這是很難理解的,如果你的概念我們正在閱讀它,看起來像一個SQL引擎提出一個體面的優化會更困難,而且通常也會堵塞日誌,並將SQL中的重要部分埋入噪聲中。
由於這個概念似乎不太常見,我希望有更好的方式來表達它,通常會更簡潔,並希望在服務器本身更高性能(假設我的天真版本不打算這是有效的)。
Ben的解決方案似乎即將給您所提供的信息的權利,但如果你給這個問題的完整描述(模式,完整的SQL等),有人也許能夠通過從不同方向觀察問題,爲您提供更好的解決方案。 – 2009-02-03 18:45:23
是(n)模式中的一個變量還是一個固定(但很大)的值? – MatBailie 2009-02-03 19:12:57