我有两张桌子、转会桌和俱乐部桌。
这是表传输:
id | 名字 | 姓氏 | 来自俱乐部 | 去俱乐部 | 价格 | 来自backnumber | 返回号码 |
---|---|---|---|---|---|---|---|
0 | 示例1 | 示例2 | EX3 | EX4 | 示例5 | 示例6 | 示例7 |
这是桌子俱乐部:
id | 缩写 | 全名 |
---|---|---|
0 | EX3 | 示例3 |
1 | EX4 | 示例4 |
我想从转账表中获取一行,获取 fromclub,将其与 Clubs 中的缩写相匹配,从该行获取全名,并将其添加到响应中。我想对 toclub 专栏做同样的事情。然后我想对表传输中的每隔一行重复一次。
为了简单起见,这是我的预期结果:
id | 名字 | 姓氏 | 来自俱乐部 | 去俱乐部 | 价格 | 来自backnumber | 返回号码 | 来自俱乐部全名 | toclub全名 |
---|---|---|---|---|---|---|---|---|---|
0 | 示例1 | 示例2 | EX3 | EX4 | 示例5 | 示例6 | 示例7 | 示例3 | 示例4 |
我似乎找不到一种方法来构建一个查询,在不获得大约 512 行结果的情况下执行此操作,即使我目前只有 8 行结果。
SELECT * FROM transfers, (SELECT clubs.fullname FROM transfers, clubs WHERE clubs.abbr = transfers.fromclub) AS fromclubfullname, (SELECT clubs.fullname FROM transfers, clubs WHERE clubs.abbr = transfers.toclub) AS toclubfullname
它返回 512 行和两列(称为 fullname),而不是一列 fromclubfullname 和 toclubfullname。
P粉8271215582024-04-03 15:15:27
您可以通过左连接
来做到这一点 -
SELECT transfers.*, c1.fullname as fromclubfullname, c2.fullname as toclubfullname FROM `transfers` LEFT JOIN clubs c1 ON (c1.abbr = transfers.fromclub) LEFT JOIN clubs c2 ON (c2.abbr = transfers.toclub)