【问题标题】:Select value from one table based on value from another根据另一个表中的值从一个表中选择值
【发布时间】:2013-10-31 16:06:57
【问题描述】:

我的数据库还没有填充,我仍在设计它的过程中。我正在做的是基于游戏制作数据库,并且我正在构建一个程序来爬取一些数据以填充数据库。因此,这是数据库的布局方式。

Item Table
id, name, image

Stat Table
id, item_id, stat_name, stat_value

我将其中一个统计名称设置为Class,并将统计值设置为Warrior。我希望能够选择所有选择了战士属性的项目。由于我对 SQL 的了解有限,这似乎需要多个查询,但我知道我错了。

我不擅长连接,我认为这是我必须做的地方,但同样,SQL 不太擅长。任何帮助将不胜感激。此外,stat_name 和 stat_value 都必须是查询。所以stat_name='Class' stat_value='Warrior'

【问题讨论】:

    标签: php android mysql sql json


    【解决方案1】:
         select i.*
           from item_table i
     inner join stat_table s
             on i.id = s.item_id
          where s.stat_name = 'Class' 
            and s.stat_value = 'Warrior'
    

    如果您不需要 id,只需将 i.* 替换为 i.name, i.image

    【讨论】:

      【解决方案2】:
      SELECT DISTINCT i.*
      FROM Item i
        JOIN Stat s
          ON i.id = s.id
      WHERE s.stat_name = 'Class' 
        AND s.stat_value = 'Warrior'
      

      如果我已经解释了您的数据库想法,这应该可以工作。

      我想说的是,我认为您的数据库设计存在缺陷,您的 Stat 表会变得臃肿并且查询起来会很痛苦。您是否考虑过为每个班级提供一张桌子?

      【讨论】:

      • 如果有办法在提取数据时区分值,但不幸的是数据的来源也不是很好。也许一旦所有的数据都被提取出来,我会制作另一个程序来完善它
      【解决方案3】:

      如果我跟随,不是 100%,但我会试一试。所以你想从 Stat 表中加载行并加入 Item 表?

      SELECT * FROM Stat
          LEFT JOIN Item 
              ON Item.id = Stat.item_id 
      WHERE Stat.stat_name='Class'
      AND Stat.stat_value='Warrior'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        • 2014-10-25
        • 2021-03-29
        • 1970-01-01
        相关资源
        最近更新 更多