根据另一列的字段值选择具有相同列值的行
Posted
技术标签:
【中文标题】根据另一列的字段值选择具有相同列值的行【英文标题】:Select rows that have the same column value based on another column's field values 【发布时间】:2017-08-25 15:41:25 【问题描述】:在我的表中,我有 3 列带有 SubmissionId, FieldName, FieldValue
。
我有一个问题:
SELECT SubmissionId, FieldName, FieldValue
FROM myTable
WHERE (FieldValue = "Soccer")
OR (FieldValue = "Main Hall")
OR (FieldValue = "August 23, 2017")
返回给我以下信息:
提交 ID |字段名 |字段值
1508 | ClassLocation | Main Hall
1509 | EventName | Soccer
1512 | EventName | Soccer
1516 | ClassLocation | Main Hall
1520 | EventName | Soccer
1520 | EventDate | August 23, 2017
1520 | ClassLocation | Main Hall
1523 | EventName | Soccer
1524 | EventName | Soccer
1525 | ClassLocation | Main Hall
1538 | EventName | Soccer
1539 | EventName | Soccer
1539 | EventDate | August 23, 2017
1539 | ClassLocation | Main Hall
1540 | ClassLocation | Main Hall
1550 | ClassLocation | Main Hall
我现在正在尝试找出添加到此查询的最佳方法,以便我只能从重复三次的 SubmissionId 列中获取字段值,在这种情况下,提交 ID 为 1520 和 1539 .
【问题讨论】:
见:Why should I provide an MCVE for what seems to me to be a very simple SQL query? 不相关提示:像这样使用IN
FieldValue IN ('Soccer', 'Main Hall', 'August 23, 2017')
如果有人想玩'Pool',或者事件发生在'Pool'中怎么办?
@Strawberry EventName 的字段值比方说是固定的,但是同一个事件“足球”,也可以在另一个 ClassLocation 或 EventDate 中播放,那么它们将具有不同的 SubmissionId。我只对 EventName/EventDate/ClassLocation 的 SubmissionId 相同的结果感兴趣...
@MarcinRachwal 在这种情况下,您搜索值而不是键似乎很奇怪!?!
【参考方案1】:
试试:
SELECT SubmissionId, COUNT(SubmissionId)
FROM YourTable
GROUP BY SubmissionId
HAVING COUNT(SubmissionId) = 3
【讨论】:
要格式化为code
,选择文本并按ctrl-k
或在每行前添加4个空格【参考方案2】:
SELECT SubmissionId
FROM myTable
WHERE FieldValue in ('Soccer','Main Hall', 'August 23, 2017')
GROUP BY SubmissionID
HAVING count(Distinct fieldName) = 3
我使用一个不同的字段值可以重复给定的提交ID。
您还可以绑定 FieldName 以确保配对映射
WHERE (FieldName, FieldValue) in (('EventName','Soccer'),('ClassLocation','Main Hall'),('EventDate','August 23, 2017'))
【讨论】:
这也很好用!我也喜欢为配对映射添加到 FieldName 的领带,非常有用!【参考方案3】:只需将当前查询用作聚合的子查询
SELECT SubmissionId
FROM ( SELECT SubmissionId, FieldName, FieldValue
FROM myTable
WHERE FieldValue IN ( "Soccer", "Main Hall", "August 23, 2017")
) as T
GROUP BY SubmissionId
HAVING COUNT(*) = 3
【讨论】:
这很好用!现在看很简单,非常感谢你帮我解决这个问题。以上是关于根据另一列的字段值选择具有相同列值的行的主要内容,如果未能解决你的问题,请参考以下文章