【问题标题】:Mysql - How to select record from table which has no relationMysql - 如何从没有关系的表中选择记录
【发布时间】:2020-08-05 22:00:34
【问题描述】:

是否可以从非关系表中获取记录?
在这种情况下,我有两条关于表评分的记录。

我想从idBengkel 获取有关表评分的数据,然后将它们添加到表 bengkel_similarity 上的 idBengkel_2 列中。

注意:idUser 列产生了多少条记录。因此,记录数必须在所有表上匹配。而且 idUser 和 idBengkel_1 不一样。


这是我的桌子:

bengkel_similarity

SELECT idBengkel_1, idBengkel_2, nilaiSimilarity
FROM bengkel_similarity
WHERE idBengkel_1 = 1 AND idBengkel_2 = 7
OR idBengkel_1 = 1 AND idBengkel_2 = 10

评分

SELECT idUser, idBengkel, nilai
FROM rating
WHERE idUser = 1

这里是所有表的结果:

bengkel_similarity的结果

+-------------+-------------+-----------------+
| idBengkel_1 | idBengkel_2 | nilaiSimilarity |
+-------------+-------------+-----------------+
|           1 |           7 | -0.1692         |
|           1 |          10 | 0               |
+-------------+-------------+-----------------+

评分结果

+--------+-----------+-------+
| idUser | idBengkel | nilai |
+--------+-----------+-------+
|      1 |         7 |     4 |
|      1 |        10 |     5 |
+--------+-----------+-------+

这就是我想要的:

+--------+-------------+-------------+-------+-----------------+
| idUser | idBengkel_1 | idBengkel_2 | nilai | nilaiSimilarity |
+--------+-------------+-------------+-------+-----------------+
|      1 |           1 |            7|      4|         -0.1692 |
|      1 |           1 |           10|      5|               0 |
+--------+-------------+-------------+-------+-----------------+

【问题讨论】:

  • 但它们不相关。那个问题。您必须拥有相同数量的行并位于正确的位置,否则您不能。如果它们确实有相同数量的行并且结果完全对齐,那么您可以执行两个查询,然后基于两个单独的提取连接结果数组,但是您必须使用您的服务器语言,例如 PHP。
  • 我在服务器端使用 codeigniter 4。但我认为需要更多时间来解决问题。如果没有解决方案我会尝试。
  • FK 和其他约束不参与查询。它们可以防止无效更新。

标签: mysql sql join non-relational-database


【解决方案1】:

我不知道您为什么将其定性为“非关系”。从您的数据和期望的结果来看,我认为您只想要一个join

SELECT 
    bs.idBengkel_1, 
    bs.idBengkel_2, 
    r.nilai
    bs.nilaiSimilarity,
FROM bengkel_similarity bs
INNER JOIN rating r 
    ON  r.idUser    = bs.idBengkel_1
    AND r.idBengkel = bs.idBengkel_2
WHERE bs.idBengkel_1 = 1 AND bs.idBengkel_2 IN (7, 10)

【讨论】:

  • 也许他指的是关系没有用外键物理声明。但正如你所说,这并不意味着数据不相关......
  • 是的,你是对的@JaimeDrq,因为这些表根本没有外键
  • idUser 有很多数据。 idBengkel 不仅是 1-10。因此,它与 idBengkel_1 不同,我将从服务器端的输入中获取 idBengkel_1。
  • 请查看备注。如果 idUser 有 4 条记录怎么办?那么 idBengkel_2 列也必须有 4 条记录。
  • 我编辑了您的查询ON r.idUser = 1,因为我将从输入中获取数据。问题是如果ON r.idUser = 2 等怎么办?如何更改IN (7, 10) 以便与 r.idUser 的数据相对应,包括它的数量?
【解决方案2】:

当我理解你正确时:

select * from bengkel_similarity , rating where idBengkel = idBengkel_2

【讨论】:

  • idUser 与 idBengkel_1 不同
猜你喜欢
  • 2021-12-30
  • 2018-03-18
  • 2017-10-17
  • 1970-01-01
  • 2019-03-03
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多