iT邦幫忙

0

有關 golang database.sql 動態 scan 與 mysql query

各位大大好,我正在寫一個wep app來練sql與後端,但碰到了問題。

假設:

我有作者,作品集,作品,3個table,作品集底下可以沒有作品,作品也可以不屬於任何作品集,作品集與作品都有名字且該欄位UNIQUE,現在我有作者id與一個名字,但我不知道這名字是作品還是做品集的名字。

需求:

  1. 我希望先找作品集,如果有符合的結果就中止,不再繼續往下找作品。
  2. 如果是作品集,應該有作品集的資料與底下的作品id
  3. 如果是作品,應該有作品的資料,與它所屬的作品集

sql

問題:

個別分開找我知道怎麼做,但想要一個QUERY搞定SQL要怎麼寫?

go

問題:

作品與作品集回傳的類型與回傳的欄位數量也不一樣,我有看到這篇但是我連欄位數量都不清楚,不知道要make多大的size,scan又只能一次scan完,我應該怎麼做?

謝謝大家。

1 個回答

0
jumpbow
iT邦新手 5 級 ‧ 2020-01-16 09:03:09

GOOGLE "SQL JOIN" 了解一下是不是你想要的,
以及依需求使用不同 join

linyanbin iT邦新手 5 級 ‧ 2020-01-16 14:47:12 檢舉

我知道JOIN,但我不知道如何搭配動態IF ELSE

這是我目前的作法,要分好幾道指令,我想知道有沒有辦法一個QUERY搞定。

CREATE TEMPORARY TABLE IF NOT EXISTS tmptable AS (
select 
	work.ownerid, work.createtime, work.updatetime,
	pjt.pid, pjt.name, pjt.htmlpath, pjt.super,
	GROUP_CONCAT(blog.bid)
from project as pjt
join work on pjt.oid = work.oid
join owner on owner.uniquename = 'any_mos'
left join blog on pjt.pid = blog.super
where pjt.name = 'name'
group by pjt.pid);


CREATE TEMPORARY TABLE IF NOT EXISTS tmptable2 AS (SELECT * FROM tmptable);


select * from tmptable

union all

select 
    work.ownerid, work.createtime, work.updatetime,
    blog.bid, blog.name, blog.htmlpath, blog.super as super_pjt,
    pjt.super as super_set
from blog
join work on blog.oid = work.oid
join owner on owner.uniquename = 'any_mos'
left join project as pjt on pjt.pid = blog.super
left join site on pjt.super = site.sid
where blog.name = 'name';


drop table if EXISTS tmptable, tmptable2;

我要發表回答

立即登入回答