我面臨一個棘手的問題,因爲我的表有兩個不同的列,這兩個列決定記錄是否處於活動狀態。 (由於同一個數據庫一次又一次的變化,兩個不同列,當然不是我自己。)確定記錄是否在SQL Server的兩個不同列上使用OR條件激活
該字段是bit
鍵入數據庫中。任何人都可以建議一個將從表中獲取記錄的查詢。
ex。 SELECT * FROM產品(isActive = 0或isCancelled = 1)
我面臨一個棘手的問題,因爲我的表有兩個不同的列,這兩個列決定記錄是否處於活動狀態。 (由於同一個數據庫一次又一次的變化,兩個不同列,當然不是我自己。)確定記錄是否在SQL Server的兩個不同列上使用OR條件激活
該字段是bit
鍵入數據庫中。任何人都可以建議一個將從表中獲取記錄的查詢。
ex。 SELECT * FROM產品(isActive = 0或isCancelled = 1)
不活動:
select * from product where isActive = 0 or isCancelled =1
活躍
select * from product where isActive = 1 and isCancelled =0
我覺得這裏是寫這個查詢
select * from product where isActive = 1 and isCancelled = 0 -- Active records
select * from product where not (isActive = 1 and isCancelled = 0) -- Inactive records
正確地將「isActive = 1」和「isCancelled = 0」之間的「和」放在正確的位置? –
是的,我覺得這個代碼很美。你可以通過表達式來過濾活動記錄,然後在 –
好方法我會選擇計算值:
select *, (isActive = 1 and isCancelled = 0) as active
from product
或更好,但創建一個視圖來隱藏這個醜陋:
create view complete_product as
select *, (isActive = 1 and isCancelled = 0) as active
from product
將「isActive = 1」和「isCancelled = 0」之間的「and」正確之前加上'not'來恢復它。 –
@ coge.soft是的,它的語法是正確的。每個'='比較都會返回一個布爾值,然後用AND來返回最終的布爾值 – Bohemian
這取決於你想如何解決isActive和isCancelled之間的矛盾。如果它們總是相反,那麼你只能檢查其中的一個,否則你必須在每種情況下提及應該考慮的事項。 – wxyz
我不認爲該列是布爾類型的,因爲SQL Server沒有其中之一。也許你的意思是「位」...... –
@Damien_The_Unbeliever是的,你是對的,它的位不是布爾值。請保留我的錯誤。 –