gpt4 book ai didi

SQL:如何在多个列上选择一个表的公共(public)行

转载 作者:行者123 更新时间:2023-12-02 07:35:04 26 4
gpt4 key购买 nike

我有一张 table :

create table a (page int, pro int)
go
insert into a select 1, 2
insert into a select 4, 2
insert into a select 5, 2
insert into a select 9, 2
insert into a select 1, 3
insert into a select 2, 3
insert into a select 3, 3
insert into a select 4, 3
insert into a select 9, 3
insert into a select 1, 4
insert into a select 9, 4
insert into a select 12, 4
insert into a select 1, 5
insert into a select 9, 5
insert into a select 12, 5
insert into a select 13, 5
insert into a select 14, 5
insert into a select 15, 5
go

(这里是这个表的SQLfiddle和我开始写的查询)

页面在所有行上的公共(public)值

  1. 我希望从该表中提取每个“pro”列的公共(public)列“page”。这是我们所期望的:

     1
    9

    我尝试使用:

    SELECT DISTINCT a.page
    FROM a
    WHERE a.page IN (
    SELECT b.page FROM a as b
    WHERE b.pro <> a.pro
    )

    但是此查询返回的每个“页面”都至少一个不是我们需要的共同值。见下文:

     1
    4
    9
    12

    相反的查询也就是至少有一次但不是所有时间都有不同的值

  2. 我希望提取链接到一个或多个“pro”的“页面”,但不对所有“pro”通用(这与之前的查询完全相反)

这是我们期望的:

  2
3
4
5
12
13
14
15

我无法找到这两个问题的解决方案 :'(谁能帮我解决这些问题?

最好的问候

编辑:SQLfiddle url

最佳答案

只是一点逆向思维 - 按 page 分组并计算每个不同的 pro 值。返回与不同 pro 值总数相匹配的行

SELECT [page]
FROM a
GROUP BY [page]
HAVING COUNT(DISTINCT pro) = (SELECT COUNT(DISTINCT pro) FROM a)

SQLFiddle

编辑:对于第二个问题,只需在最后一行将 = 替换为 '<' -> SQLFiddle

关于SQL:如何在多个列上选择一个表的公共(public)行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17469739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com