2016-08-04 70 views
1

在我们的数据库中,我们有一组与用户数绑定的订单。我只需要拉出与特定用户号码有关的所有记录,只要特定的项目号码当前不与用户号码相关联即可。子查询在不存在值的情况下返回行

如果我发现用户号/项目号存在一行中,我需要返回null。

如果用户编号/项目编号组合不存在,我需要返回最高编号。

下面是我最好的猜测在这个子查询。我的SQL技能在这一点上非常生疏,希望有任何帮助。

SELECT 
    max(itemNumber) 
FROM 
    orders 
WHERE 
    userNum = 12 IN 
    ((SELECT 
     itemNumber 
    FROM 
     orders 
    WHERE itemId = 27) IS NULL) 
+4

您能否显示一些样本数据和预期结果?如上所述,问题有点不清楚 –

+0

请提供一些样本数据和预期结果,b因为许多SO用户的英语不太好,所以对于这样的用户来说,可能很难将你的措辞概念化得很清楚 – Sami

回答

1

试试这个:

SELECT max(itemNumber) 
FROM 
orders 
WHERE 
userNum IN 
    ((SELECT itemNumber 
    FROM orders 
    WHERE itemId = 27 AND userNum = 12) IS NULL) 
+0

完美,工作,谢谢!是否有可能对某些参考材料做一个小解释/点来解释这里发生了什么? – NealR

0

您的查询不清和不正确的:WHERE userNum = 12 IN...

,如果我得到它的好,这是一个样本的逻辑,你可以对其进行测试。

SELECT 
    IF(EXISTS (SELECT * FROM orders WHERE itemId = 27), NULL, MAX(itemNumber)) 
FROM 
    orders 
WHERE 
    userNum = 12 
0

请检查This sample on sqlfiddle 希望它让你在寻找什么

SELECT 
    itemNumber, userNum 
FROM 
    orders 
where userNum is not null 
union 
SELECT 
    max(itemNumber) as itemNumber, null 
FROM 
    orders 
where userNum is null 

注意:如果其不正确,你可以请更改样本数据,或者告诉我们不同的预期结果,我会很高兴能够更改查询以满足您的要求:(目前还不是很清楚)

相关问题