繁体   English   中英

如何使用查询结果选择Sql Server中的另一个表

[英]How to use result of query to select in to another table in Sql Server

嗨,我是新来的。 我在选择查询结果到另一个数据库时遇到问题。

<?php
include_once("config.php");
$connectionInfo = array( "Database"=>"rohanstat", "UID"=>$UID, "PWD"=>$PASS);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$sql2 = "SET ROWCOUNT 15 SELECT   attacker, COUNT(attacker) AS dupe_cnt FROM [rohanstat].[dbo].[TPKill]
GROUP BY attacker
HAVING   COUNT(attacker) > 0
ORDER BY COUNT(attacker) DESC";
$stmt2 = sqlsrv_query( $conn, $sql2);
while($rows = sqlsrv_fetch_array($stmt2))
echo $rows ['attacker']."<br>";
?>

我只想使用$rows['attacker']选择另一个数据库。 这意味着我想这样使用它。

sql = "select * from [RohanGame].[dbo].[TCharacter] where name = $rows ['attacker'];

提前致谢。

您可以简单地使用IN

SELECT  *
FROM    [RohanGame].[dbo].[TCharacter] 
WHERE   name IN 
        (   SELECT   TOP 15 attacker
            FROM [rohanstat].[dbo].[TPKill]
            GROUP BY attacker
            HAVING   COUNT(attacker) > 0
            ORDER BY COUNT(attacker) DESC
        );

或者,如果您需要COUNT,则可以将结果结合在一起:

SELECT  tc.*, a.Dupe_cnt
FROM    [RohanGame].[dbo].[TCharacter]  tc
        INNER JOIN
        (   SELECT   TOP 15 attacker, COUNT(attacker) AS dupe_cnt 
            FROM [rohanstat].[dbo].[TPKill]
            GROUP BY attacker
            HAVING   COUNT(attacker) > 0
            ORDER BY COUNT(attacker) DESC
        ) a
            ON a.Attacker = tc.name;

我认为这不会有太大变化,但是您可以换掉:

HAVING   COUNT(attacker) > 0

WHERE   attacker IS NOT NULL

由于您已经按攻击者分组,因此COUNT(attacker)不为空的唯一组就是COUNT(attacker)为空的组:

SELECT  tc.*, a.Dupe_cnt
FROM    [RohanGame].[dbo].[TCharacter]  tc
        INNER JOIN
        (   SELECT   TOP 15 attacker, COUNT(*) AS dupe_cnt 
            FROM [rohanstat].[dbo].[TPKill]
            WHERE attacker IS NOT NULL
            GROUP BY attacker
            ORDER BY COUNT(*) DESC
        ) a
            ON a.Attacker = tc.name;

您对该问题的标记是SQL; SQL服务器

但对于mySQL Oracle和其他数据库是相同的

在这里我回答T-SQL中的其他问题

您可以通过两种方式在PHP中从DB1读取内存,然后打开连接并向DB2做逻辑

或在T-SQL中可以在一个查询中完成

从表1复制到表2,并将日期插入7天还是14天?

如果您还想要使用PHP的解决方案,即已声明的$rows变量,则可以执行以下操作:

$attackers = "";
foreach($rows as $row) {
  $attackers .= "$row,";
}
//Get rid of the last comma
$attackers = rtrim($attackers, ',');
$sql = sprintf("select * from [RohanGame].[dbo].[TCharacter] where name IN (%s)", $attackers);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM