【问题标题】:Subquery for same column but separate values?同一列但不同值的子查询?
【发布时间】:2013-12-09 13:35:55
【问题描述】:

好吧,我不知道怎么问这个问题,所以我将发布查询,看看是否有人可以帮助解决这个问题。 如果有帮助,我正在使用 Access。我会发布表格,但我不知道如何发布,所以如果有人可以解释如何做,我也会发布这些表格。

SELECT Pokemon.SpeciesID, Pokemon.FormID, SpeciesName, 
Type.TypeName AS Type1 WHERE Type.TypeID = SpeciesType.TypeID AND SpeciesType.IsPrimaryType IS true, 
Type.TypeName AS Type2 WHERE Type.TypeID = SpeciesType.TypeID AND SpeciesType.IsPrimaryType IS false,
FROM Pokemon, Type, SpeciesType;

我知道这是错误的,我需要 FROM 之后的 WHERE 部分,但我不知道如何使它工作。

是的,我必须选择两次类型,从字面上看,没有办法我不必这样做。有一个多对多连接表(不知道叫什么),它具有 TypeID、SpeciesID 以及该行是否是该物种的主要类型的指示符。我需要在一个查询中选择那些为真和那些为假的。

(这与学校项目有关。)

编辑:由于没有人解释如何发布表格,这里是关系的屏幕截图,经过修改以突出显示相关的内容。 https://dl.dropboxusercontent.com/u/28505565/bluh/school/relationships.png IsPrimaryType 是一个是/否列。我需要选择 Yes 作为 Type1 和 No 作为 Type2。

【问题讨论】:

  • 请放置表格并说明您需要从中获得什么。谢谢
  • 嗯...好吧,我该如何格式化才能放在这里?这是在 Access 中完成的,而不是在 MySQL 中,因此这些表没有对应的 SQL。
  • 在 FORM 语句中使用 Table1, Table2, ... 连接表不是一个好主意。改用 JOIN
  • 好吧,我只是很笨,不知道我在做什么,显然。您如何同时对所有这些使用连接,而不会导致声明混乱?
  • 如果您使用访问和不确定 sql ,使用向导会更容易吗?

标签: sql ms-access subquery


【解决方案1】:

也许您可以在 SELECT 语句中使用 Switch 函数?

SELECT Pokemon.SpeciesID, Pokemon.FormID, SpeciesName,
switch(
SpeciesType.IsPrimaryType IS true, Type.TypeName,
true, ''
) AS Type1,
switch(
SpeciesType.IsPrimaryType IS false, Type.TypeName,
true, ''
) AS Type2

在此处阅读有关 Switch 功能的更多信息:http://office.microsoft.com/en-sg/access-help/switch-function-HA001228918.aspx

【讨论】:

  • 这非常接近。我唯一的问题是它在单独的行中显示了两者中的每一个。 dl.dropboxusercontent.com/u/28505565/bluh/school/… 有没有办法绕过这个,还是我运气不好?
  • 您可以对两个表进行 FULL JOIN,其中一个表包含 IsPrimaryType 为 true 的记录,另一个表包含 IsPrimaryType 为 false 的记录。或者,您可以尝试 ConcatRelated (allenbrowne.com/func-concat.html)。
【解决方案2】:

好的,这里是……请注意,因为我不知道你的表格或字段是什么,这是一个非常粗略的指南

SELECT 
    Pokemon.SpeciesID, Pokemon.FormID, SpeciesName, Type1, Type2
FROM 
Pokemon
INNER JOIN 
pokemon.ID = speciestype.id
INNER JOIN
    typetable.id = pokemon.id

如您所见,请从您需要的所有表格中选择所有字段。

接下来将你的第一个表加入你第二个,他们需要一个关系,在这种情况下,我们会简单地说我只想要匹配的记录,在这个表 id 和其他 ID 上(如果是这样的话,那就是给你找出链接的字段)! 再次这样做,然后宾果游戏

接下来你可能需要过滤,所以添加 WHERE 子句和过滤器,我只想要 where type = true。

你会说,

WHERE yourtable.type = 'true'  

注意它是字符串格式,因为我不知道你的字段类型是什么。

更新:您还应该能够推断出所需的额外信息,我们可以为您查看所有信息。但由于这是一项任务,我会从这里得到指导,然后用谷歌搜索剩下的,最好的学习方法就是去做!

祝你好运!

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 2016-01-13
    • 2016-01-02
    • 2018-07-31
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多