【发布时间】:2017-06-20 03:29:44
【问题描述】:
我的 MySQL 服务器数据库中有两个表,它们有一个公共列:
表 1
+---------------------------------+
| columnA | columnB |
+---------------------------------+
| 123 | lorem |
| 456 | ipsum |
| 456 | dolor |
+---------------------------------+
表2
+---------------------------------+
| columnA | columnC |
+---------------------------------+
| 123 | sit |
| 123 | amet |
| 123 | consectetur |
| 456 | adipiscing |
+---------------------------------+
我想获取columnB 和columnC 的所有值,其中columnA 是123。我正在使用的查询是:
SELECT Table1.columnB, Table2.columnC
FROM Table1
INNER JOIN Table2 ON Table1.columnA = Table2.columnA
WHERE Table1.columnA = '123';
这是查询结果:
+---------------------------------+
| columnB | columnC |
+---------------------------------+
| lorem | sit |
| lorem | amet |
| lorem | consectetur |
+---------------------------------+
我得到了所需的结果,但我不希望像本例中的 columnB 那样重复这些值。有没有办法用NULL 或空格替换(最后两个)冗余值lorem?比如:
+---------------------------------+
| columnB | columnC |
+---------------------------------+
| lorem | sit |
| | amet |
| | consectetur |
+---------------------------------+
【问题讨论】:
-
它们不是多余的,它们显示了一种关系。如果您想以不同的方式显示数据,请在前端(应用程序或报告工具)的表示层中进行,而不是在后端。
-
感谢@under。是的,您对这种关系的看法是正确的,并且在前端进行,但我只是想知道在后端是否有任何完美/标准的方法。
-
“我想获取 columnA 为 123 的 columnB 和 columnC 的所有值”不清楚。有人会期望您指的是其中一个或另一个中的行,或者两者中的行(带有 123)。但是从您的查询和示例结果来看,您似乎是指 columnB-columnC 对,其中 columnB 在 Table1 中显示为 123,而 columnC 在 Table2 中显示为 iwth 123。你不能用语言走捷径,它会给出一些模棱两可、错误或荒谬的东西(委婉语:“不清楚”)。您也可以调用您不想要的结果。请努力说得更清楚。
-
@philipxy 抱歉,如果不清楚。我需要两个表中针对 columnA=123 的值。我已经用问题末尾的示例输出为您更新了问题。如果空格可以被 NULL 替换,则没有问题。现在清楚了吗?
-
您看不出“两个表中的值与 columnA=123 相对应”只是一堆与您对旧查询的想法有关但没有说出来的词吗? (看看我是如何写得很清楚的。)(“反对”的定义是什么?)(修辞。)我确实从你的旧输出和描述它有多糟糕的描述中预料到了这张图片。但是:在多个 A 值与多个 B 值匹配的一般情况中,所需的输出是什么?这里有任何相关的 PKs/UNIQUEs/CKs 和 FKs 吗? A什么时候保留vs null?这就是为什么没有minimal reproducible example 的问题是题外话。
标签: mysql sql-server database