2016-08-15 68 views
2

我試圖在hackerrank解決一個MySQL查詢上,這要求得出以下模式:如何MySQL查詢工作的信息模式的基礎

* * * * * 
* * * * 
* * * 
* * 
* 

,並在討論中,我發現下面的MySQL查詢,這從information_schema獲取數據以繪製所需的模式,這是我無法理解的。

SELECT REPEAT('* ', @NUMBER := @NUMBER - 1) FROM information_schema.tables, (SELECT @NUMBER:=6) t LIMIT 5 

任何人都可以請解釋這個查詢的流程,它是如何工作的?

+0

它只是使用一個應該有足夠的迭代行的表。如果你不習慣這種事情,那麼就比較模糊。 –

+0

@GordonLinoff:謝謝你的回覆。我明白,它使用表有足夠的行。但是,你能解釋一下,它是如何確保從信息模式中獲取表格的,哪一個不確定是否有足夠的行。如果你能詳細闡述一下,那將是很有用的。 –

+0

。 。就個人而言,我認爲'列'將是一個更好的選擇。 –

回答

1

它的工作方式是信息模式點表可能有數百行供您使用。

您可以驗證。它只是想要一些超過5行的數據源。它可能是任何東西。

它做一個交叉連接來初始化一個變量(@NUMBER)到數字6.它從5個星號開始重新開始,每次少於1次,限制爲5行。

+0

這些條目是來自信息架構的臨時表嗎?我無法找到足夠的參考插入這些表中的條目。我也嘗試在我的本地設置中執行這個查詢,總共獲得了283條記錄。但是從這些記錄實際生成的地方?你能把這個問題點亮嗎? –

+1

專業信息模式數據庫中有三十多張表。它們由服務器自動維護,作爲結構和關係以及它們所持有的所有其他信息進行更改。你的星號查詢有2個表格。第一個是有283行的表(我的有311個左右)。第二個表是具有1行和1列的派生表。它是數字6.所以對於你來說,如果'極限5'沒有被加上,你有可能跑283次。 – Drew

+0

您需要記住,這只是MxN的笛卡爾乘積,其中M = 283,N = 1。但是限制5將其減少到5.這個問題基本上與[INFO SCHEMA](http://dev.mysql.com/doc/refman/5.7/en/information-schema.html)無關作爲虛擬輸入開始生成星號 – Drew