gpt4 book ai didi

mysql - 合并Mysql中的两个查询

转载 作者:行者123 更新时间:2023-11-29 09:00:09 26 4
gpt4 key购买 nike

我有一个包含所有用户视频下载历史记录的表格:

src_ip   vlan_id  video_id area  date_pl
aaaa A 1 123 xxxx-xx-xx
aaaa A 2 123 xxxx-xx-xx
aaaa B 1 456 xxxx-xx-xx
bbbb A 4 123 xxxx-xx-xx
bbbb C 6 567 xxxx-xx-xx
...

我使用 src_ip 和 vlan_id 的组合来识别不同的用户,现在我想随机选择 50 个不同的用户(这意味着 src_ip 和 vlan_id 的 50 个不同的组合)并列出他们所有的下载历史记录。

所以我首先这样做:

   SELECT distinct src_ip, vlan_id from video_2 as table2 
WHERE date_pl >= '2011-11-29 00:00' AND date_pl <= '2011-12-05 23:55' order by rand() limit 50

然后我做了:

   SELECT src_ip, vlan_id, video_id, area from video_2 
where video_2.src_ip = table2.src_ip AND video_2.vlan_id = table2.vlan_id
AND date_pl >= '2011-11-29 00:00' AND date_pl <= '2011-12-05 23:55'

但问题是,由于它们是两个独立的查询,因此在第二个查询中,它不知道 table2 是什么。

我该如何解决这个问题或者如何将这两个查询合并为一个?

最佳答案

CREATE TEMPORARY TABLE table2
AS
SELECT distinct src_ip, vlan_id from video_2
WHERE date_pl >= '2011-11-29 00:00' AND date_pl <= '2011-12-05 23:55'
ORDER BY rand()
LIMIT 50;

SELECT src_ip, vlan_id, video_id, area
FROM
video_2
JOIN
table2 ON video_2.src_ip = table2.src_ip AND video_2.vlan_id = table2.vlan_id';

由于在子查询中使用 LIMIT 的限制,您可以 不能 行中派生出“table2”。否则就会

SELECT 
v2.src_ip, v2.vlan_id, v2.video_id, v2.area
FROM
video_2 v2
JOIN
(SELECT distinct v.src_ip, v.vlan_id from video_2 v
WHERE v.date_pl >= '2011-11-29 00:00' AND v.date_pl <= '2011-12-05 23:55'
ORDER BY rand()
LIMIT 50
) table2 ON v2.src_ip = table2.src_ip AND v2.vlan_id = table2.vlan_id;

编辑:子查询中的限制 LIMIT 主要适用于 IN,而不适用于派生表

编辑 2:添加更多别名

关于mysql - 合并Mysql中的两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8880615/

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