用于交叉选择的MySql查询

时间:2011-05-13 17:11:17

标签: mysql

软件包: package_id,user_id

交易: PRODUCT_ID,USER_ID,的package_id

我想在package_id为null或0的事务中选择行 但仅当存在其他具有相同user_id的事务时,其中package id大于0 那可能吗。对不起英语不好......我试过瞪眼,但无法猜出谷歌查询的正确问题。

我知道标题不合适,所以请任何人提出更好的标题。

Gwynnbleid1

3 个答案:

答案 0 :(得分:1)

也许这......我试图不惜一切代价避免次选,所以它会变得疯狂而且有点混乱,而且在我尝试之前我从未真正知道它是否有效。

SELECT DISTINCT T.*
FROM   packages P
       LEFT JOIN transactions T
         ON P.user_id = T.user_id
       LEFT JOIN transactions T2
         ON T.user_id = T2.user_id
WHERE  ( T.package_id IS NULL
          OR T.package_id = 0 )
       AND T2.package_id > 0 

答案 1 :(得分:0)

此查询将为至少有一项其他交易package_id > 0NULL 0的用户提供package_id的所有交易。

SELECT * FROM transactions WHERE user_id IN 
(SELECT user_id FROM transactions WHERE package_id IS NULL OR package_id = 0) 
AND package_id > 0;

答案 2 :(得分:0)

SELECT A.* FROM

(SELECT * FROM TRANSACTIONS WHERE (package_id = 0 or package_id is null)) A
(SELECT * FROM TRANSACTIONS WHERE package_id is not null) B

WHERE A.userID = B.userID