gpt4 book ai didi

MySQL多表查询

转载 作者:行者123 更新时间:2023-11-29 00:57:21 26 4
gpt4 key购买 nike

您好!我在创建引用多个表的查询时遇到困难。我是 SQL 的新手,加入让我很困惑。我对谷歌一无所知,在四处搜索后我发现了 Joining tables in SQL这让我离我想去的地方更近了!我创建的查询没有按照我的意愿进行。我有两个表:

disp_profile
disp_id* name address zip
0001 Profile1 SomeAddress1 11111
0002 Profile2 SomeAddress2 22222
0003 Profile3 SomeAddress3 33333

zipcode
zip_code* state city county
11111 CA City1 County1
22222 WA City2 County2
33333 NV City3 County3

我试图做的是在 zipcode.zip = disp_profile.zip(由变量 State 过滤)时从 zipcode 中获取城市、州、县。理想情况下返回如下内容:

    dispId    dispName     dispAddress     dispZip    zipState    zipCounty    zipCity  zipCode
001 Profile1 SomeAddress1 11111 CA County1 City1 11111
or
002 Profile2 SomeAddress2 22222 WA County2 City2 22222


SELECT
dp.disp_id AS dispId, dp.name AS dispName, dp.address1 AS dispAddress1, dp.zip AS dispZip, zc.state AS zipState, zc.county AS zipCounty, zc.city AS zipCity, zc.zip_code AS zipCode
FROM
disp_profile dp
INNER JOIN
zipcodes zc
ON
dp.zip = zc.zip_code
WHERE
dp.state = 'CA'

我知道这可能不是解决此问题的最佳方法,但我认为最好将事物分开存储,而不是为每个项目存储冗余信息。 disp_profile 中的数据集大约有 1000 条记录,而 zip_codes 大约有 30,000。使用子查询会更容易吗?感谢您的宝贵时间!

最佳答案

不,你做得很好。这就是join where made for,这里不需要使用子查询。您可以,但是它不会表现得更好(MySQL 查询优化器甚至可能在内部将其转换为连接)。

如果你担心速度:在你的 SELECT 语句前加上“EXPLAIN”这个词,看看 MySQL 在做什么:

EXPLAIN SELECT
dp.disp_id AS dispId, dp.name AS dispName, dp.address1 AS dispAddress1, dp.zip AS dispZip, zc.state AS zipState, zc.county AS zipCounty, zc.city AS zipCity, zc.zip_code AS zipCode
FROM
disp_profile dp
INNER JOIN
zipcodes zc
ON
dp.zip = zc.zip_code
WHERE
dp.state = 'CA'

它会告诉您您的语句是如何执行的。如果您希望我们帮助解释,请在此处粘贴输出:)

关于MySQL多表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5375054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com