【问题标题】:SQL Combine 2 Tables without a primary keySQL组合2个没有主键的表
【发布时间】:2018-09-08 21:33:32
【问题描述】:

我刚刚开始学习 sql,我正在尝试了解如何在 SQL 中执行以下操作。

我有 2 张桌子: 示例 - TableA (Id), TableB(Id, Text)

Following are the values in Table A:
1
2
1

以下是表 B 中的值(注意 - 文本列将始终具有与其 ID 相似的值):

1, Tom
2, John
1, Tom
3, Doe

我尝试执行以下查询: "Select TableB.Text from TableB, TableA where TableA.Id = TableB.Id"

它返回了:

Tom
Tom
John
Tom
Tom

我在哪里寻找:

Tom
John
Tom

如果这在 SQL 中可行,谁能指出我正确的方向?

【问题讨论】:

  • 你使用的是什么 MySQL 版本?
  • 我使用的是以下版本 - v3.20.1
  • 你确定吗? 3.20 是二十多年前发布的。您在哪里看到的这个号码?
  • 是的,我只是想学习这个,所以我在使用在线 SQL 编辑器 - tutorialspoint.com/execute_sql_online.php
  • 但这是 SQLite,而不是 MySQL。虽然有很多相似之处,但它们仍然大不相同!

标签: mysql sql


【解决方案1】:

您可以先在子查询中“区分”它,而不是直接加入tableb

SELECT b.text
       FROM (SELECT DISTINCT
                    id,
                    text
                    FROM tableb) b
            INNER JOIN tablea a
                       ON a.id = b.id;

tableb 的不同版本如下所示:

id   text
---------
1    Tom
2    John
3    Doe

第二个'Tom' 不见了。像这样,不再有两行匹配 ID 1,这导致 'Tom's 在您对来自 tablea 的 ID 1 的每一行的原始查询结果中出现两倍。

【讨论】:

  • 感谢您的详细解释!
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2013-04-30
相关资源
最近更新 更多