Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何基于另一列的特定列值筛选表?_Mysql_Sql_Join - Fatal编程技术网

Mysql 如何基于另一列的特定列值筛选表?

Mysql 如何基于另一列的特定列值筛选表?,mysql,sql,join,Mysql,Sql,Join,你好,我这里有张桌子 --------------------- ID | PARTY | Name.Id --------------------- 1 | IND | 12 2 | IND | 13 3 | CUST | 14 4 | CUST | 15 5 | CUST | 16 6 | IND | 17 --------------------- 我想返回整个表,但要筛选'CUST',它在'Name.Id'列中有值15和16 结果应该是这样的 ------

你好,我这里有张桌子

---------------------
ID | PARTY | Name.Id
---------------------
1  | IND   | 12
2  | IND   | 13
3  | CUST  | 14
4  | CUST  | 15
5  | CUST  | 16
6  | IND   | 17
---------------------
我想返回整个表,但要筛选'CUST',它在'Name.Id'列中有值15和16

结果应该是这样的

---------------------
ID | PARTY | Name.Id
---------------------
1  | IND   | 12
2  | IND   | 13
3  | CUST  | 14
4  | IND   | 17
---------------------

我试着在'Name.Id'上使用
where
语句,但它只返回那些值为15和16的行。

你能试一试吗

select *
from t
where (PARTY, Name.Id) not in (
     select 'CUST', 15
     union
     select 'CUST', 16
)
整表,但筛选“CUST”,其“Name.Id”列中的值为15和16

听起来您需要一个where子句,如:

WHERE NOT (party = 'CUST' and name.id IN(15,16))

但是CUST在您的示例数据中似乎是多余的,也就是说,您可以将其简化为
而name.id不在(15,16)
我想我在这里找到了解决方案

select *
from t
where Party <> 'CUST'
or (Party = 'CUST'
and Name.Id = 14))
选择*
从t
“客户”在哪里
或(参与方='CUST'
和名称(Id=14))

这一行中的(PARTY,NAME.Id)是否有语法错误?很奇怪你有这样的错误。在字段名中。试着用“Name.Id”引用它。也写为
party!='CUST'或name.id不在(15,16)
中,这应该是可行的。在我看来,这不是很容易推理出来的,这就是为什么我这样写的原因。OP说“[除了]名为15和16的CUST”,实际上应该写为“[除了]名为15或16的CUST”-人类总是犯这种语言错误-“把所有的苹果和香蕉从盒子里拿出来”-水果不能同时是苹果和香蕉,但我们知道它的意思。无论如何,我离题了。虽然您可能理解
not(a=1和b=2)
相当于
a!=1或b!=2
并非所有人都是,因此我选择了最接近自然语言表达式的结构。因此,请注意,
=操作系统不是不平等的标准SQL;我努力在可能的情况下写出标准答案,以实现最大的交叉可移植性“值为15和16的行”无值同时为15和16。要么说“值为15或16的行”,要么说“值为15的行和值为16的行”。(每一个都表示一个不同的查询。)PS要么说“有”的行,要么说“有”的每一行。PS这是一个容易找到的常见问题解答。在考虑发帖之前,请阅读本手册,谷歌搜索任何错误信息,以及关于您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定姓名/字符串/数字,“site:stackoverflow.com”和标签;阅读许多答案。反思你的研究。代码问题需要解决。还显示您能够做什么。不做“15或16”。虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文可以提高其长期价值。这正是任务的条件:当Party='CUSt'和Name.Id=15或Name.Id=16时,必须没有记录
select *
from t
    where Party not in
        (select Party from t
            where Party="CUST" 
                and (Name.Id=15 or Name=16));