![](/img/trans.png)
[英]MySQL query to select one table based on values from two different tables.
[英]MySQL Create Tables Based On Values From A Different Table
根據另一個表中的值自動創建新表的正確方法是什么? 例如,如果表 A 有一個名為 city 的列,其中包含不同的城市值,那么我需要根據每個不同的城市創建一個新表。 然后需要將具有相應城市的所有記錄插入到相應的表中。 此外,如果城市名稱中包含空格,則需要將其替換為下划線。 在 MySQL 中怎么能做到這一點?
在 MS ACCESS 中,我可以通過以下方式完成此操作:
使用 Select 並替換名為 SELREP 的查詢
SELECT table_A.column1, table_A.column2, table_A.city, Replace([city]," ","_") AS table_name_column FROM table_A;
創建公共 Function MakeTableCity
Public Function MakeTableCity() DoCmd.SetWarnings False Dim db As Database Set db = Application.CurrentDb Dim distinctValues As DAO.Recordset Set distinctValues = db.OpenRecordset("SELECT table_name_column FROM SELREP GROUP BY table_name_column", dbOpenSnapshot) Do Until distinctValues.EOF DoCmd.RunSQL "SELECT * INTO " & distinctValues("table_name_column") & " FROM SELREP WHERE table_name_column ='" & distinctValues("table_name_column") & "'" distinctValues.MoveNext Loop DoCmd.SetWarnings True Set distinctValues = Nothing Set db = Nothing End Function
如果您計划使用有關城市的數據創建一個新表 city,這意味着每個城市一行,然后 go 前面並閱讀答案。
另一方面,如果您計划為每個城市制作一個具有相同列的新表,那么您的計划是非常糟糕的設計。 首先閱讀規范化。
第一種選擇是創建一個名為city
的表,其中包含您想要的字段。 例子:
CREATE TABLE city
( id INT auto_increment PRIMARY KEY
, name VARCHAR(50) NOT NULL
, population INT
, state CHAR(2)
) ;
然后將不同的城市名稱復制到其中:
INSERT INTO city (name)
( SELECT DINSTINCT city --- change "city" into REPLACE(city, ' ', '_')
FROM table_A --- for the small changes you want
) ;
然后,更新其他字段(人口、state 等)。
如果沒有兩個城市具有相同的名稱,則可以使用ON table_A.city = city.name
來完成兩個表之間的JOIN
如果沒有,(最好是因為city
的Primary Key
會更小),您可以通過添加字段cityid
並刪除city
字段來更改table table_A
ALTER
結構。 然后兩個表之間的JOIN
將使用ON table_A.cityid = city.id
第二種選擇是直接創建表城市:
CREATE TABLE city AS
( SELECT DINSTINCT city AS name --- change "city" into REPLACE(city, ' ', '_')
FROM table_A --- for the small changes you want
) ;
然后更改定義主鍵的表,添加(人口、state 等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.