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));