0

我有以下查询,它成功地获取了我想要的数据......

$query  = @"SELECT table1.user_id, table1.col8, table2.col5, user_tokens.expiry
FROM table1 
INNER JOIN table2
ON table1.user_id=table2.user_id
INNER JOIN user_tokens
ON user_tokens.user_id=table1.user_id 
WHERE table1.col2 = '{$userName}'";

我一直在玩它来给我一些额外的数据而无需第二次查询。我想要的数据是来自另一个表的行数 - table10(也有user_id作为列),其中 user_id 列匹配。

所以像...

,

(SELECT COUNT(*) FROM table) as userDataCount

这目前给了我整个表的行数,而不仅仅是与 table1 具有相同 user_id 的行

我认为我所做的内部连接只会计算 user_id 列与查询的其余部分匹配的 table10 行,以及我尝试加入 table10 的不同方式,或者使用额外的 WHERE 表示WHERE table10.user_id = table1.user_id失败。

有没有一种简单的方法可以做到这一点,还是我需要两个单独的查询?

4

2 回答 2

3

对此有许多可能的解决方案,我说明的一个是通过一个子查询加入,该子查询分别获取每个组的总数。

SELECT  table1.user_id, 
        table1.col8, 
        table2.col5, 
        user_tokens.expiry,
        COALESCE(b.totalDataCount, 0) userDataCount
FROM    table1 
        INNER JOIN table2
            ON table1.user_id=table2.user_id
        INNER JOIN user_tokens
            ON user_tokens.user_id=table1.user_id 
        INNER JOIN
        (
            SELECT  user_ID, COUNT(*) totalDataCount
            FROM    table10
            GROUP   BY user_ID
        ) b ON  b.user_id = table1.user_id
WHERE   table1.col2 = '{$userName}
于 2013-04-05T03:06:35.990 回答
1
SELECT 
table1.user_id, 
table1.col8, 
table2.col5, 
user_tokens.expiry, 
(SELECT COUNT(*) 
    FROM table
        WHERE table.user_id=table1.user_id) as uCount 
    FROM table1 
    INNER JOIN table2
    ON table1.user_id=table2.user_id
    INNER JOIN user_tokens
    ON user_tokens.user_id=table1.user_id 
    WHERE table1.col2 = '{$userName}'";
于 2013-04-05T03:06:49.413 回答