【发布时间】:2012-12-28 18:31:21
【问题描述】:
我有两个这样的 MySQL 表:
表A
[name] | [id]
---------------------
Shirts 1, 10, 16, 18
Pants 14, 11
Skirts 19, 13, 15
表B
[id] | [s_id]
---------------------
ABC 1
AC 1
DE 10
DEC 19
ACD 16
BCD 18
BCO 18
现在我需要从TableB 获取与s_id 匹配的ids,即来自id 的TableA 的任何给定名称。
查询如下所示:
SELECT id
FROM TableB
WHERE s_id IN ( SELECT id
FROM TableA
WHERE name = 'Shirts' )
所以子查询返回1, 10, 16, 18 (csv)。但我知道这不能在子查询中这样使用。
有什么想法吗?
【问题讨论】:
-
您拥有的是一个非常糟糕的架构。由于我并不真正了解表中的那些 id 实际代表什么,因此我很难就如何修复架构给出答案。你能用现实世界的术语解释一下这些表代表什么,以便给出如何修复你的架构的建议吗?
-
我了解架构状况不佳。但不幸的是,我无法更改架构,因为它是不久前开发的现有实时产品。
-
问这些问题的人经常会说“我无法更改架构”,这总是让我感到惊讶。有时在软件开发中需要更改架构,尤其是在您尝试以前所未有的方式查询数据的情况下。
-
@MikeBrant 我明白你的意思:-)。我正在为现有软件开发 API,该软件已经开发了 5 年。它不是一个简单的产品。它有大量的文件和大量的表格。一个小的变化可以影响大。虽然我很想解决这个问题,但我做不到。 :-)