MySQL语句从一个表中读取数据并检查另一个表

时间:2016-06-18 21:31:33

标签: mysql sql

我有这两个表:

成就

Achievement http://image.prntscr.com/image/f2de060d501a4af395fd94e4f6e7cd00.png

实现

Achieves http://image.prntscr.com/image/295df6dc6a174ef5b00c7968273eb92a.png

问题

我想从表格中检索行。但是,我不想要所有的行,我想要特定的Steam ID已经获得的行。让我们以STEAM_0:0:46481449为例,我想首先检查STEAM_0:0:46481449获取的ID列表(Achieves表中的第4列说明是否获得了成就)然后只读取那些成绩。

我希望这是有道理的,如果不让我知道,那么我可以更好地解释一下。

我知道如何使用两个MySQL语句执行此操作,但这可以通过单个MySQL语句完成吗?如果是这样,那就太棒了,请告诉我:D

编辑:我将在下面添加两个查询

SELECT * FROM Achieves WHERE Achieves.SteamID = 'STEAM_0:0:46481449' AND Achieves.Acquired = 1;

然后我执行以下查询

SELECT * FROM Achievement;

然后通过PHP我会检查我应该采取的ID并输出它们。这就是为什么我想在1个查询中获得相同的结果,因为它更易读,更容易。

2 个答案:

答案 0 :(得分:0)

在sql 左连接中,在第二个表上应用条件会在连接条件不重要时过滤结果:

   Select * from achievement 
   left join achieves on (achievement.id=achieves.id) 
   where achieves.acquired=1 and achieves.SteamID = 'STEAM_0:0:46481449'

此外,我建议不要在achieves表中使用ID作为两个表之间的共享密钥。将其命名为其他。

答案 1 :(得分:0)

我认为左连接在这里没有意义。在任何情况下,您都不希望看到成就表。

像这样的东西

 SELECT * 
 FROM Achieves A
 JOIN Achievement B on A.ID = B.ID
 WHERE A.SteamID = 'STEAM_0:0:46481449' 
   AND A.Acquired = 1;