簡體   English   中英

如何聯接/子查詢第二個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM