簡體   English   中英

如何將一個表中另一個表具有多個ID的兩個表聯接在一起?

[英]How to join two tables with multiple IDs from one table used in other table?

我需要tableA兩個表tableAtableB ,但是問題是在tableB我有來自tableA兩個ID ,因此我需要將它們tableA起來,以便同時獲得兩個值。 我想使用Codeigniter的活動記錄類來實現它。 這是一個小演示:

tableA:
╔══════════╦════════════╗
║ video_id ║ video_name ║
╠══════════╬════════════╣
║        1 ║ short      ║
║        2 ║ long       ║
║        3 ║ black      ║
║        4 ║ white      ║
╚══════════╩════════════╝

tableB
╔═════════╦════════╦════════╗
║ pair_id ║ pair_a ║ pair_b ║
╠═════════╬════════╬════════╣
║       1 ║      1 ║      2 ║
║       2 ║      1 ║      4 ║
║       3 ║      4 ║      3 ║
║       4 ║      3 ║      2 ║
╚═════════╩════════╩════════╝

這不起作用:

$this->db->select('*')
         ->from("tableA")
         ->join('tableB AS A', 'tableA.video_id = A.pair_a')
         ->select("tableA.video_name as VIDEO_A")

         ->join('tableB AS B', 'tableA.video_id = B.pair_b')
         ->select("tableA.video_name as VIDEO_B")

         ->get()
         ->result();

最終結果需要是這樣的:

stdClass Object
(
    [0] => stdClass Object
        (
            [VIDEO_A] => short
            [VIDEO_B] => long
        )

    [1] => stdClass Object
        (
            [VIDEO_A] => short
            [VIDEO_B] => white
        )

    [2] => stdClass Object
        (
            [VIDEO_A] => white
            [VIDEO_B] => black
        )

    [3] => stdClass Object
        (
            [VIDEO_A] => black
            [VIDEO_B] => long
        )

)

您在查詢中混合了tableA和tableB。 對於B中的每個項目,您都想要一些東西,所以從那里開始加入。 然后,加入重命名的表,並從重命名的表中選擇項目。

->from("tableB")
->join('tableA AS pairA', 'pairA.video_id = tableB.pair_a')
->join('tableA AS pairB', 'pairB.video_id = tableB.pair_b')
->select("pairA.video_name as VIDEO_A, pairB.video_name as VIDEO_B")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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