如何针对第一个查询的结果运行第二个查询?

时间:2015-03-10 10:14:03

标签: mysql

这是更新的方案,希望这比上一个版本更清晰。

表1显示了此流程的所有数据,包含大约500万条记录。

`table1`
ID   Forename Surname Tel  Source Optin DistributedDate
1    A        Test    0131 TL037  NULL  NULL
2    B        Test    0141 TL035  NULL  NULL
v    v        v       v    v      v     v

表2通过插入脚本进行更新,并包含一段时间内使用的不同源列表,这可以很容易地由视图创建。

INSERT INTO table2(`Sourcecode`)
(SELECT DISTINCT(a.`Sourcecode`) FROM `table1` a)

`table2 - structure`
ID  Sourcecode
1   TL037
2   TL031
3   TL004
4   TL029
5   TL035

我现在试图从表2中删除每个不同来源的5个随机记录的详细信息,并将这些详细信息插入表3中。

`table3 - structure`
ID   Forename Surname Tel  Source Optin DistributedDate
NULL NULL     NULL    NULL NULL   NULL  NULL 

这是我到目前为止创建的代码:

SET @Sourcecode = 
(SELECT b.`Sourcecode`
FROM `table2` b
WHERE b.id = b.id
AND b.`Sourcecode` NOT IN (SELECT DISTINCT(source) FROM `table3`)
LIMIT 1);

INSERT INTO table3.*
(SELECT 
a.id AS 'ID',
a.`FirstName` AS 'Forename',
a.`Surname` AS 'Surname',
a.`TelephoneNumber2` AS 'Tel',
a.`SourceCode` AS 'Source',
a.`optin` AS 'Optin',
a.`DateExported` AS 'DistributedDate'
FROM `table1` 
WHERE  a.`SourceCode` = @SourceCode
ORDER BY RAND(a.sourcecode)
LIMIT 5

基本上我正在寻找的最终结果是从@Sourcecode的结果集中自动多次运行上述查询,直到value为NULL。

我已经尝试使用循环功能,但我没有太多运气。

2 个答案:

答案 0 :(得分:0)

您可以创建如下视图:

CREATE VIEW query1 AS
SELECT DISTINCT(b.`source`)
FROM `table2` b

然后从View收集:

SELECT *
FROM `table1` a
WHERE a.`source` IN(DISTINCT(b.`source`) FROM `query1` b)
ORDER BY RAND(a.id)
LIMIT 5)

我自己没有测试过,如果这不起作用,请提供一些来源和预期的数据。

答案 1 :(得分:0)

试试这个:

SELECT a.id, A2.RAND_NUMBER
FROM `table1` a, (SELECT DISTINCT(b.`source`)
                 ,ABS(CHECKSUM(NewId())) % @INT AS RAND_NUMBER
                  FROM `table2` b) AS A2
WHERE A2.RAND_NUMBER BETWEEN 1 AND 5
GROUP BY a.id, A2.RAND_NUMBER
ORDER BY RAND(a.id)