SQL在选择多列中替换值

时间:2014-03-26 08:41:34

标签: sql

我有两张桌子:

Table Users

UserId     Name
1          John
2          Alice
3          Tom
4          Charles
....
23120      Bob

Table Clients

Id        Name1   Name2    Name3  .... Name2345
1           1       3        450           4
2           2       17       33            1
...
15302920    44      231      5             7

我想在哪里进行SQL查询

Clients.Id = 1

结果如下:

Id     Name1   Name2    Name3  ...  Name2345
1      John     Tom     Bill        Charles

我的客户端表有数千列,我试图找到一种方法来替换所选结果的所有列中的值(除了ID列),而没有数千个连接。

我知道我可以使用以下类型的查询(但我想避免成千上万的连接):

SELECT  a.ID,
    b.name name1,
    c.name name2,
    d.name name3
FROM    clients a
    INNER JOIN users b
        ON a.name1 = b.userID
    INNER JOIN users c
        ON a.name2 = c.userID
    INNER JOIN users d
        ON a.name3 = d.userID
WHERE   a.ID = 1

另外:

  • 我无法改变"客户"的数据/结构。表但我可以改变"用户"必要的表格。
  • 我无法复制"客户"因为它非常大而且变化很快。
  • "客户" table有数千列和数百万行,但所选部分始终是表的一小部分。

有可能吗?

1 个答案:

答案 0 :(得分:0)

没有简单的查询来实现这一点,因为SQL在行(垂直)和列中的刚性方面基本上是灵活的。这是我提出的最接近的:

select c.id, 
   (select name from dbo.users where UserId = c.name1),
   (select name from dbo.users where UserId = c.name2),
   (select name from dbo.users where UserId = c.name3),
   (select name from dbo.users where UserId = c.name4)
from clients c