2011-11-04 74 views
1

我有2個表中的每個mysql的最大連接表

我可以創建一個查詢,將加入2個表,並給我2

我之間的最大同一列想出了

SELECT MAX(certificate_number) AS max FROM contacts_cstm 
UNION 
SELECT MAX(certificate_number) AS max FROM accounts_cstm 

但是,這給了我從每個的最大值。我怎麼能修改此查詢給我他們兩個之間的最大

感謝

+0

我這裏要小心。如果您正在使用此查詢來查找最大證書編號,以便您可以爲新記錄指定一個新證書,那麼您將遇到非常糟糕的原子性問題。如果沒有,下面的答案就好了。 – drdwilcox

+0

是的,我正在分配證書號碼在php腳本 我已經有一個自動增量列的每個表,你會建議是一個更好的方法來分配新的證書號碼?你的意思是根據原子性問題,2個用戶同時創建賬戶可能在理論上被分配相同的證書號碼?我可以採取的另一種方法是什麼?在此先感謝 – user1019144

+0

創建另一個表來保存當前的證書編號並使用原子語句來檢索和更新值。在這裏,我不會有太大的幫助,因爲我在MySql中沒有這樣做。這個想法是更新CertNumberMaster SET CurrValue = CurrValue + 1,然後向MySql詢問以前的值。在SQL Server中,我們有一個存儲過程執行此操作:UPDATE CertNumberMaster SET @OutParam = CurrValue,CurrValue = CurrValue + 1.由於語句是原子的,因此我們獲取前一個值並同時更新表。請注意,CurrValue是表中唯一的列。 – drdwilcox

回答

3

包裝與另一個查詢將這樣的伎倆:

SELECT MAX(certificate_number) AS max 
FROM (
    SELECT certificate_number FROM contacts_cstm 
    UNION 
    SELECT certificate_number FROM accounts_cstm 
) as CHILD 
+1

+1比我更簡單的答案。 –

+0

更簡單,但你的可能性會更高。我將從兩個表中獲取所有行,進行聯合篩選,然後應用最大版本。你只會獲取兩個子行,然後是最大值。這對於臨時表和什麼都肯定意味着更少的工作。 –

+0

在這種情況下,我想我會取消刪除。 –

0

嘗試:

SELECT MAX(m) FROM 
    (SELECT MAX(certificate_number) as m FROM contacts_cstm 
    UNION 
    SELECT MAX(certificate_number) as m FROM accounts_cstm) t 

SELECT MAX(certificate_number) FROM 
    (SELECT certificate_number FROM contacts_cstm 
    UNION 
    SELECT certificate_number FROM accounts_cstm) t 
3

呼叫MAX()UNION的,而比裏面。

SELECT MAX(maxnum) AS maxnum FROM 
(
    SELECT MAX(certificate_number) as maxnum FROM contacts_cstm 
    UNION 
    SELECT MAX(certificate_number) as maxnum FROM accounts_cstm 
) subq 
+0

工作神話般! 所有非常好的例子,這是我嘗試的第一個例子。謝謝 – user1019144

+0

@ user1019144樂於幫忙,歡迎來到Stack Overflow。請通過點擊分數下方的灰色複選標記來標記您滿意的答案。 –