[英]How to join/subquery a second table
我有兩個表,一個表在每一行中都有一些信息,以及另一個表包含的ID的逗號分隔列表。 現在,我正在從表A(帶有逗號分隔的ID)中獲取數據,並且我還希望從表B(包含其他信息的表)中獲取所有數據。 我想以最有效的SQL方法做到這一點。
我正在考慮根據字段中的id將表B連接到表A,但是我不確定是否可行。 同樣重要的是要注意,我是根據另一個IN語句從表A中獲取數據,因此我的最終目標是根據表A行中的字段中的ID將表B中的所有行附加到表A行中(按行)
如果有人可以遵循所有這些,並且知道我要做什么,我將不勝感激示例查詢:D
如果您需要任何進一步的說明,我很樂意提供。
謝謝
現在設置表A的方式:
`table_a_id` VARCHAR ( 6 ) NOT NULL,
`table_b_ids` TEXT NOT NULL, -- This is a comma seperated list at the moment
-- More data here that is irrelevant to this question but i am grabbing
表B的設置如下:
`table_b_id` VARCHAR ( 6 ) NOT NULL,
`name` VARCHAR ( 128 ) NOT NULL,
-- More data that is not relevant to the question
我還想最終切換到像Cassandra這樣的NOSQL系統,從我簡要閱讀的內容中我了解沒有NOSQL中的joins之類的東西? 一個額外的幫助將是幫助我設置這些表,這樣我可以以較少的轉換和難度進行轉換。
您需要添加另一個表。
Person -- your Table A
------
PersonID
Thing -- your Table B
------
ThingID
ThingName
PersonThing -- new intersection table
-------
PersonID
ThingID
然后您的查詢變為
SELECT * from Person
INNER JOIN PersonThing ON Person.PersonID = PersonThing.PersonID
INNER JOIN Thing ON PersonThing.ThingID = Thing.ThingID
所以現在你在哪里
001 | Sam Spade | 12,23,14
你將會擁有
Person
001 | Sam Spade
Thing
12 | box
23 | chair
14 | wheel
PersonThing
001 | 12
001 | 23
001 | 14
這就是其他答案所說的“規范化”的含義。
編輯添加
據我對NoSQL的了解,您將繞過這樣的聯接:
Person -- your Table A
------
PersonID
OtherPersonStuff
Thing -- your Table B
------
ThingID
ThingName
OtherThingStuff
PersonThing -- denormalized table, one record for each Thing held by each Person
-------
PersonID
ThingID
ThingName
OtherThingStuff
為了換取額外的空間(通過多次復制Thing信息)和潛在的數據管理難題(使重復項保持同步),您將獲得更簡單,更快的查詢。
因此,您的最后一張表將如下所示:
PersonThing
001 | 12 | box | $2.00
001 | 23 | chair | $3.00
001 | 14 | wheel | $1.00
002 | 12 | box | $2.00
003 | 14 | wheel | $1.00
在這種情況下,OtherThingStuff是事物的值。
您應該考慮規范化數據庫架構以便使用聯接。 使用逗號分隔的列表將不允許您使用任何SQL IN命令。
最好的方法是為每個唯一ID存儲一行,然后可以在TableA.id = TableB.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.