MSSQL数据解析

时间:2012-07-22 21:03:40

标签: sql-server linker

我不知道它叫什么,所以我只想解释一下。

假设有两个表,tableAtableB

  • tableA中,有一列有一个数字(例如105)
  • tableB中,有一列有文字(例如'This')

105表示'This'。

所以一个数字存储在A表中,而w / c在B表中有意义。

我想获得tableA号码,但是当它显示时会显示“这个”。

逻辑:如果A的结果为105,则显示B中的等效文本,其中id为105。 显示:这个

SELECT TOP 1
    CHAR_KEY AS charid,
    USER_KEY AS userid,
    CONVERT(VARCHAR,substring(char_data, 9, 16)) AS name,
    CONVERT(INT,cast(reverse(substring(char_data, 7, 2)) as BINARY(2))) AS level,
    CONVERT(INT,substring(char_data, 25, 1)) AS type,
    CONVERT(INT,cast(reverse(substring(char_data, 263, 2)) as BINARY(2))) AS strength,
    CONVERT(INT,cast(reverse(substring(char_data, 265, 2)) as BINARY(2))) AS wisdom,
    CONVERT(INT,cast(reverse(substring(char_data, 267, 2)) as BINARY(2))) AS dexterity,
    CONVERT(INT,cast(reverse(substring(char_data, 269, 2)) as BINARY(2))) AS charisma,
    CONVERT(INT,cast(reverse(substring(char_data, 271, 2)) as BINARY(2))) AS intelligence,
    CONVERT(INT,cast(reverse(substring(char_data, 273, 2)) as BINARY(2))) AS constitution,
    CONVERT(INT,cast(reverse(substring(char_data, 309, 4)) as BINARY(4))) AS fame,
    CONVERT(INT,cast(reverse(substring(char_data, 33, 4)) as BINARY(4))) AS guild,
    CONVERT(INT, substring(char_data, 261, 1)) AS permission
FROM CHAR_DATA0 WHERE CONVERT(INT, substring(char_data, 261, 1))=0x00 ORDER BY level DESC

获取公会名称的查询。

SELECT 
    guild_name
FROM guild_data WHERE guild_key=guild

我想要的是guild

guild结果的第一个SELECT查询示例:518

在guild_data表上,列guild_name包含公会518的名称。 518是guild_key。

请帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

SELECT
    guild_data.guild_name
FROM CHAR_DATA0
inner join guild_data on guild_key = CONVERT(INT,cast(reverse(substring(char_data, 33, 4)) as BINARY(4)))
WHERE CONVERT(INT, substring(char_data, 261, 1))=0x00 ORDER BY level DESC

答案 1 :(得分:0)

您需要“选择”和“加入”

  select b.text
  from tablea a 
  inner join tableb b on a.id = b.id
  where a.id = 105

然而,要使这项工作,你需要在两个表中使用“id”。