【问题标题】:SQL query syntax for loop (Classic ASP)循环的 SQL 查询语法(经典 ASP)
【发布时间】:2017-12-20 15:05:29
【问题描述】:

我有 4 个表和以下 SQL 查询:

SELECT * FROM dbo.Synola, dbo.Stores, dbo.Fpa, dbo.Nomismata
WHERE
dbo.Stores.Store_id = dbo.Synola.Store_id
AND
dbo.Stores.fpa_id = dbo.Fpa.fpa_id
AND
dbo.Stores.nomisma_id = dbo.Nomismata.nomisma_id

以上工作正常且没有错误。

我的问题是,当我尝试循环上述查询时:

目前,在我的 Stores TABLE 中,我只有 2 家商店,我希望在循环中获得 ONLY 2 条记录的结果。我的 2 家商店的 2 条记录。但不幸的是,我收到了超过 2 条记录。

在循环中仅接收 2 个商店 的结果的查询的正确语法是什么?

【问题讨论】:

  • 现在是哪一年?如果可能,请使用现代语法。
  • 如果您获得超过 2 个结果行,那么这些其他表中有 多个 匹配行。 we 或您的 SQL 系统如何知道从每个商店的其他表中选择 哪些 行?检查您的数据,根据存储在这些其他表中的数据制定特定规则,以了解如何为每个商店选择一行,然后,如果不清楚如何整合这些规则在您的查询中,至少将它们添加到您的问题中。添加解释时,示例数据也不会受到伤害。

标签: sql asp-classic


【解决方案1】:

这应该只检索所有表中可用的数据。因此,没有匹配到主Stores 表,则结果不会显示。

SELECT *
FROM Stores s
JOIN Synola sy ON sy.Store_id = s.Store_id
JOIN Fpa f ON f.fpa_id = s.fpa_id
JOIN Nomismata n ON n.nomisma_id = s.nomisma_id

如果您因为其他表中有更多匹配项而获得更多行,那么您需要考虑添加更多WHERE 条件或使用其他类型的JOIN

更多信息:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

编辑:查看您在JOIN 上获得多个匹配项的位置:

SELECT s.Store_id "Store_id from Store",
    ,sy.Store_id "Store_id from Synola"
    ,s.fpa_id "fpa_id from Store"
    ,f.fpa_id "fpa_id from Fpa"
    ,s.nonisma_id "nomisma_id from Store"   
    ,n.nonisma_id "nomisma_id from Nomismata"
FROM Stores s
JOIN Synola sy ON sy.Store_id = s.Store_id
JOIN Fpa f ON f.fpa_id = s.fpa_id
JOIN Nomismata n ON n.nomisma_id = s.nomisma_id

【讨论】:

  • 我再次收到超过 2 条记录。我还发布了一张带有我的表格结构的图片..
  • @user2986570 那么您在JOINON 部分中的SynolaFpaNomismata 中获得了不止一个匹配项。如果不需要,请不要 JOIN 其中一些表,或者添加 WHERE 条件以过滤掉您不想要的匹配项。
  • @user2986570 我添加了一个额外的 sn-p 来帮助您找到哪个表获得了多个匹配项。从技术上讲,这只是为了给你一个视觉效果。由于这种类型的连接是如何工作的,所有三个都有多重匹配。
  • 我从 Synola 表中获得了多个匹配项
  • @user2986570 好的,所以此时您需要在WHERE 子句中添加一个条件,以从 Synola 中过滤掉您不想要的行。那,或者如果您不需要满足您的需要,即您不需要其中的任何信息,请不要加入 Synola。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多