mysql - 重写选择查询

标签 mysql sql

我手头有一个相当简单的(我认为)问题。下面提供了我需要的示例表和结果(实际上这些表包含更多的列和数据,我开玩笑地留下了相关的内容)。还有一个查询可以准确返回我需要的内容。但是,我不喜欢它的工作方式相当粗糙(我一般不喜欢子查询)。问题是,如何重写查询,以便它能够自动对将来出现在 TABLE2 中的更多列使用react?现在,如果将“z”列添加到 TABLE2,我需要修改代码中的每个查询并添加一个更多相关的子查询。我只希望 select 读取 TABLE2 的全部内容并将 id 数字转换为 TABLE1 中的相应字符串。

表1

-----------------
id      |x      |
-----------------
567     |AAA    |
345     |BBB    |
341     |CCC    |
827     |DDD    |
632     |EEE    |
503     |FFF    |
945     |GGG    |
234     |HHH    |
764     |III    |
123     |JJJ    |
-----------------

表2

-------------------------
id      |x      |y      |
-------------------------
1       |123    |341    |
2       |567    |632    |
3       |345    |945    |
4       |764    |503    |
5       |234    |827    |
-------------------------

我需要的结果

-----------------
A       |B      |
-----------------
JJJ     |CCC    |
AAA     |EEE    |
BBB     |GGG    |
III     |FFF    |
HHH     |DDD    |
-----------------

我的查询

SELECT
(SELECT `x` FROM `TABLE1` WHERE `TABLE2`.`x` LIKE `TABLE1`.`id` LIMIT 1) as A,
(SELECT `x` FROM `TABLE1` WHERE `TABLE2`.`y` LIKE `TABLE1`.`id` LIMIT 1) as B
FROM `TABLE2` ORDER BY `id` DESC;

最佳答案

您可能想要重组您的数据模型:

而不是:

-------------------------
id      |x      |y      |
-------------------------
1       |123    |341    |
2       |567    |632    |
3       |345    |945    |
4       |764    |503    |
5       |234    |827    |
-------------------------

你会:

----------------------
col_id      |col     |
----------------------
1           |x       |
2           |y       |
----------------------

---------------------------
id      |col_id  |col_val |
---------------------------
1       |1       |123     |
1       |2       |341     |
2       |1       |567     |
2       |2       |632     |
etc
---------------------------

可能不值得这么麻烦(当您一次访问多个列时,您实际上需要进行透视),但它允许您在所有当前和 future 的列中执行您想要的查询。

关于mysql - 重写选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004024/

相关文章:

PHP 超全局变量

mysql - 具有多个参数和返回类型的存储函数

sql - 如何在带有 Sqlite3 的 Swift 中使用 "select * table where * = ?"

sql - PostgreSQL - "DISTINCT ON"和 "GROUP BY"语法

sql - 从单列中选择多行到单行

sql - oracle View 和网络流量

mysql - 加速: SELECT statement on DOUBLE

php - 如何诊断本地网络上间歇性缓慢的 PHP 到 MySQL 连接速度?

php - 即使数据无效,表单仍然接受数据

mysql - mysql查询日期间隔的替代方案