【问题标题】:SQL: How can I pick a cell value from one table as a condition to select another tableSQL:如何从一个表中选择一个单元格值作为选择另一个表的条件
【发布时间】:2021-06-25 17:20:37
【问题描述】:

您好,我是 SQL 的新手。如果需要,我如何在 SQL 或 python 中实现这个过程:

首先,我从table1中随机抽取了两个结果:

SELECT TOP 2 id, date 
FROM table 1
WHERE date >= 2 AND date <= 6
ORDER BY RAND(CHECKSUM(*) * RAND())

+-----------+                      
|  table1   |                      
+-----------+                      
| id | date | 
+----+------+
| x  |  3   | 
| y  |  4   |  
+----+------+

我需要使用值xy 作为条件来显示另一个表格。例如,使用x,我可以:

SELECT id, date 
FROM table1
WHERE date >= 2 AND date <= 6 AND id = 'x'
ORDER BY date ASC

+-----------+                      
|  table2   |                      
+-----------+                      
| id | date | 
+----+------+
| x  |  3   |
| x  |  4   |  
| x  |  5   |  
| x  |  6   |  
| x  |  6   |  
+----+------+

我需要的是在不重复日期的情况下获取 table2 的长度。例如,table2 有 5 行,但最后两行的日期重复。所以最终的答案是4 rows

对于id = y,我要做同样的事情(比如table3),比较table3和table2的长度,看是否一致。

如果是,则返回长度(例如,4 行);如果否,则返回 table1 并选择另外两个 id(例如 z 和 y)。

我正在考虑使用 python 来选择值或创建变量,然后在 SQL 中使用 python 变量。但对于一个新人来说,这太过分了。如果有人能帮助我完成这个过程,我真的很感激。

【问题讨论】:

  • 您的描述有些混乱 - 您想要计数(或不同计数)还是实际数据? 34 的日期是什么意思?
  • 很抱歉造成混淆。我要一个号码。数字是 table2/table3 的长度(我需要确保两个表的长度相同)。 date 只是一个列名。您可以将其视为价值。

标签: sql sql-server database


【解决方案1】:

您可以使用带有 IN 子句的子查询

这里也有两个版本,也许这也有帮助

CREATE TABLE table1 ([id] varchar(2),[date] int)
GO
    SELECT id, date FROM table1

    where date >= 2 and date <= 6

    and id IN (

    SELECT TOP 2 id FROM table1

    WHERE date >= 2 and date <= 6

    ORDER BY RAND(CHECKSUM(*) * RAND())
)

    ORDER BY date ASC
GO
编号 |日期 :- | ---:
SELECT id, date FROM table1
WHERE EXISTS (SELECT 1
              FROM (

    SELECT TOP 2 id,[date] FROM table1

    WHERE date >= 2 and date <= 6

    ORDER BY RAND(CHECKSUM(*) * RAND())) AS table2
              WHERE  table1.[id] = table2.[id]
                        AND table1.[date] = table2.[date])
GO
编号 |日期 :- | ---:

db小提琴here

【讨论】:

  • 谢谢,但我无法在数据库中创建新表。这是不允许的。你有其他想法吗?欣赏!
  • 你不需要创建你可以使用现有的表。我添加了一个 tbale 只是为了表明 qiery 运行没有问题
  • 我想我可以从你的代码中得到一些线索,而不是创建一个新表。我会试一试!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 2017-11-13
  • 2020-07-28
相关资源
最近更新 更多