如果SELECT中存在NULL列,则删除不同的行

时间:2016-06-28 15:51:35

标签: mysql sql

我有一张交易表,

History[CustomerID, BikeID,Checkout,StationIDout,Checkin,StationIDin]

其中CheckoutCheckinGETDATE()

我想查询History,以便我收到当前位于给定StationID的自行车(即CheckinStationIDinNOT NULL

我目前正在使用此查询:

SELECT DISTINCT BikeID from History
where StationIDin = {0} 
AND Checkin IS NOT NULL AND StationIDin IS NOT NULL

毫不奇怪,我仍在接收已签出的自行车,因为我的查询选择了一个已完成的交易所看到的第一个BikeID,而没有搜索另一个未重新检入相同自行车的实例。 / p>

我想形成一个查询 NOT 选择BikeID签出的查询。换句话说,要在StationIDin中搜索任何NULL,并在选择BikeID之前将其从结果中删除。

(我为可能误导标题而道歉,我无法更好地描述它)

CustomerID  BikeID   Checkout   StationIDout   Checkin   StationIDin
--------------------------------------------------------------------
1001          32     6/8/16       500          6/28/16       500
1002          21     1/2/15       500          1/3/15        500
1003          32     3/7/15       500           NULL         NULL

CURRENT OUTPUT:
32
21

DESIRED OUTPUT:
21

2 个答案:

答案 0 :(得分:2)

使用GROUP BY,而不是SELECT DISTINCT

SELECT BikeID 
FROM History h
WHERE StationIDin = {0} 
GROUP BY BikeId
HAVING SUM(CheckIn IS NULL) = 0;

这会将所有没有CheckIn记录的自行车返回为NULL

答案 1 :(得分:1)

使用自我加入来过滤掉与自行车ID相匹配的结果,并且他们没有签到。

SELECT DISTINCT h1.BikeID
FROM History AS h1
LEFT JOIN History AS h2 ON h1.BikeID = h2.BikeID AND (h2.Checkin IS NULL OR h2.StationIDin IS NULL)
WHERE h1.Checkin IS NOT NULL AND h2.StationIDin IS NOT NULL
AND h2.BikeID IS NULL