Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 32

0
votes
answers
11 views
+10

讀寫通用的枚舉休眠

0

我和對象,它包含一個字段讀寫通用的枚舉休眠

@Column(name = "section", nullable = false) 
@Enumerated(EnumType.STRING) 
private Enum section; 

這樣做的原因是因爲對象是在三個不同的項目所使用的每一個將要提供自己的枚舉。看起來寫對象很容易,但我看不懂,並繼續獲得

Caused by: java.lang.IllegalArgumentException: Unknown name value [BLAH] for enum class [java.lang.Enum] 

這當然是非常有意義的。那麼有沒有什麼辦法可以指定每個項目的值將指向哪個枚舉?

+0

這是否意味着你將有三個不同的項目連接到相同的數據庫? –

+0

他們不會連接到相同的數據庫。父類只有對象,子類是連接到在那裏定義的數據庫的類。 – Quillion

沙发
0
1

您應該在每個項目中分別定義每個枚舉屬性。

最好的辦法是從當前類中刪除枚舉屬性,註釋是類@Embeddable而不是@Entity,並在每個項目中,創造出將其嵌入一個實體類,也宣佈了自己的特定項目的枚舉porperty。

你也可以從當前類中刪除枚舉,使抽象類,與@MappedSuperclass取代@Entity,並有每個項目申報它的一個子類,聲明瞭一個具體項目的枚舉。但是,最好總體設計優先於繼承設計。

如果你需要多態,也就是說,你需要能夠泛指由一整塊的每個項目的實體代碼,你可以有每個項目的實體類實現一個接口:

public interface Sectionable<E extends Enum<E>> { 
    E getSection(); 
    void setSection(E value); 
} 

@Entity 
public class Project1Entity 
implements Sectionable<Section1> { 
    @Embedded 
    private ProjectData data = new ProjectData(); 

    @Column(name = "section", nullable = false) 
    @Enumerated(EnumType.STRING) 
    private Section1 section; 

    public ProjectData getData() { 
     return data; 
    } 

    public void setData(ProjectData newData) { 
     Objects.requireNonNull(newData, "Data cannot be null"); 
     this.data = newData; 
    } 

    @Override 
    public Section1 getSection() { 
     return section; 
    } 

    @Override 
    public void setSection(Section1 section) { 
     Objects.requireNonNull(section, "Section cannot be null"); 
     this.section = section; 
    } 
} 
0
votes
answers
10 views
+10

VB.net BackGroundWorker在DataGridView中交叉線程

0

我有一個BackGroundWorker,可以在DataGridView中查看mySQL中的數據。在我的DoWork事件VB.net BackGroundWorker在DataGridView中交叉線程

connection() 
    Try 
     conn.Open() 
     Dim query As String 
     query = "SELECT column02 AS 'Company ID', column05 AS Lastname, 
         column06 AS Firstname, column07 AS Middlename, 
         column04 AS 'Contact No.', column13 AS 'Area' 
       FROM table01 
       WHERE column10 = '" & selectedAccount & "' 
       AND column18 = 'Yes'" 
     command = New MySqlCommand(query, conn) 
     dataAdapter.SelectCommand = command 
     dataAdapter.Fill(dataTable) 
     bSource.DataSource = dataTable 
     DataGridView_Accounts.DataSource = bSource 
     For i As Integer = 0 To dataTable.Rows.Count - 1 
      dataTable.Rows(i)("Company ID") = dataTable.Rows(i)("Company ID") 
      dataTable.Rows(i)("Lastname") = dataTable.Rows(i)("Lastname") 
      dataTable.Rows(i)("Firstname") = dataTable.Rows(i)("Firstname") 
      dataTable.Rows(i)("Middlename") = dataTable.Rows(i)("Middlename") 
      dataTable.Rows(i)("Contact No.") = dataTable.Rows(i)("Contact No.") 
      dataTable.Rows(i)("Area") = dataTable.Rows(i)("Area") 
     Next 
     conn.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    Finally 
     conn.Dispose() 
    End Try 

它是在我的DataGridView中引發錯誤關於跨線程。

我曾嘗試這個移動到RunWorkerCompleted事件

DataGridView_Accounts.DataSource = bSource 
    For i As Integer = 0 To dataTable.Rows.Count - 1 
     dataTable.Rows(i)("Company ID") = dataTable.Rows(i)("Company ID") 
     dataTable.Rows(i)("Lastname") = dataTable.Rows(i)("Lastname") 
     dataTable.Rows(i)("Firstname") = dataTable.Rows(i)("Firstname") 
     dataTable.Rows(i)("Middlename") = dataTable.Rows(i)("Middlename") 
     dataTable.Rows(i)("Contact No.") = dataTable.Rows(i)("Contact No.") 
     dataTable.Rows(i)("Area") = dataTable.Rows(i)("Area") 
    Next 

大約有跨線程沒有更多的錯誤,但是在我的DataGridView我無法查看結果。即使我的數據庫已滿,它也是空的。由於

+0

該循環沒有意義......它所做的只是將行和字段值分配給自己。 – MrGadget

+0

後臺工作正在檢索數據,這是通過調用'Fill'完成的。擺脫那無用的循環。 UI更新是數據綁定,您應該在'RunWorkerCompleted'事件處理程序中執行此操作。 – jmcilhinney

+0

在SQL中有兩個無效的列別名:'column02 AS'公司ID''和'column04 AS'聯繫號'''除非MySql允許它們中有空格。 – MrGadget

沙发
0
1

看看這個讓你更接近的工作...

Imports MySql.Data 

Public Class Form1 

    Private Const ConnectionString As String = "" 

    ' This probably comes from the form but OP did not share that with us. 
    Private selectedAccount As String = "" 

    Private dataTable As New DataTable 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Task.Run(Sub() DoWork()) 
    End Sub 

    Private Sub DoWork() 
     Dim query As String = "SELECT column02 AS 'CompanyID', column05 AS Lastname, 
           column06 AS Firstname, column07 AS Middlename, 
           column04 AS 'ContactNo', column13 AS 'Area' 
           FROM table01 WHERE column10 = @selectedAccount AND column18 = 'Yes'" 

     Using MySqlConnection As New MySqlClient.MySqlConnection(ConnectionString) 
      Dim MySqlCommand As New MySqlClient.MySqlCommand(query, MySqlConnection) 

      ' Use Parameters to avoid vulnerability to SQL Injection 
      MySqlCommand.Parameters.Add("@selectedAccount", MySqlClient.MySqlDbType.String) 
      MySqlCommand.Parameters("@selectedAccount").Value = selectedAccount 

      Using MySqlDataAdapter As New MySqlClient.MySqlDataAdapter(MySqlCommand) 
       MySqlDataAdapter.Fill(dataTable) 
      End Using 
     End Using 

     RefreshGrid() 
    End Sub 

    Sub RefreshGrid() 
     If Me.InvokeRequired Then 
      ' Shift this call to the UI thread 
      Me.Invoke(Sub() RefreshGrid()) 
     Else 
      bSource.DataSource = dataTable 
      DataGridView_Accounts.DataSource = bSource 
      DataGridView_Accounts.Refresh() 
     End If 
    End Sub 

End Class 

老實說,「漂亮的名字」應在DGV,而不是SQL設置,但那是另一個話題,我沒有追逐這個解決方案。

0
votes
answers
9 views
+10

來自一列的組夥伴

0

我在名爲claim.files的一個表中有兩列,第一列被命名爲'claim'並且包含聲明文件編號ex。 4355,6444,7674等,第二個被命名爲「合作伙伴」,幷包含ex的合作伙伴代碼。 8393,4783,38283. 索賠文件號碼是唯一的,但每個索賠文件可以有更多的合作伙伴,所以我想要運行一個可以將每個索賠文件的所有合作伙伴分組的選擇。如果我運行這個「選擇聲明,聲稱來自claim.files的合作伙伴(4355,6444,7674)聲明中的聲明,合作伙伴」,如果它擁有更多合作伙伴,它將複製聲明。來自一列的組夥伴

我想要的結果是象下面這樣:

claim partners 
4355 57878, 45874, 58977 

如果我運行下面的代碼會重複索賠數

select claim, partner from claim.files where claim in (4355, 6444, 7674) group by claim, partner 

這樣做的結果會如何,如果我運行上面的選擇

claim partners 
    4355 57878 
    4355 45874 
    4355 58977 
+0

請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very- simple-sql-query – Strawberry

+0

請發佈正確的sql語句。這個snr是什麼?通過僅與像sum()或average() – mbieren

+1

等函數一起工作的羣組,請解釋如何索賠可以有更多的合作伙伴,如果它們是獨特的,並且snr在圖片中的位置。 – isaace

沙发
0
1

如果要選擇爲每個claim分隔的夥伴逗號,y您可以同時使用group_concat

select claim, group_concat(partner separator ',') as partners 
from files 
where snr in (4355, 6444, 7674) 
group by claim; 

Demo

| claim |   partners | 
|-------|-------------------| 
| 4355 | 57878,45874,58977 | 

更新時間:如果您使用的是SQL服務器,你可以這樣做,而不是:

SELECT 
    f1.claim, 
    STUFF((
      SELECT ',' + CAST(f2.partner AS NVARCHAR(50)) 
      FROM files as f2 
      where snr in (4355, 6444, 7674) 
      and f1.claim = f2.claim 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS partners 
FROM files as f1 
where snr in (4355, 6444, 7674) 
group by f1.claim; 

- SQL Server demo

| claim |   partners | 
|-------|-------------------| 
| 4355 | 57878,45874,58977 | 
+0

它不工作,我有一個SQL客戶端 – haxx

+1

@haxx你是什麼意思的SQL客戶端?它如何不起作用?沒有提供預期的結果?或者你有錯誤? – 2017-12-27 14:51:26

+0

我得到的錯誤:錯誤:[SQL0204]找不到* LIBL類型* N中的GROUP_CONCAT。 SQLState:42704 ErrorCode:-204 – haxx

0
votes
answers
9 views
+10

如何從MySql數據庫中獲取結果並將它們發送回API.ai

0

我需要一些幫助來確定SQL查詢的語法,同時通過連接到Google雲Mysql數據庫的api.ai webhook &使用它們。 雖然查詢工作,在 '請求被超時'如何從MySql數據庫中獲取結果並將它們發送回API.ai

'use strict'; 
const mysql = require('mysql'); 

exports.name = (req, res) => { 

    let action = req.body.result['action']; 

if (action === 'apple') { 


    callDB().then((output) => { 

     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify(output)); 
    }).catch((error) => { 

     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify(error)); 
    }); 

} 
}; 

function callDB() { 
    return new Promise((resolve, reject) => { 

    try { 

     var connection = mysql.createConnection({ 
      host: "<host>", 
      user: "<user>", 
      password: "<pass>", 
      database: "<DB>" 
     }); 

     connection.query("SELECT description AS solution FROM mtable WHERE title LIKE '%Breakfast%'", function (error, results, fields) { 
      if (!error) { 

       let response = "The result is: " + results[0].solution; 
       response = response.toString(); 
       let output = {'speech': response, 'displayText': response}; 
       console.log(output); 
       resolve(output); 

      } else { 

       let output = {'speech': 'Error. Query Failed.', 'displayText': 'Error. Query Failed4.'}; 
       console.log(output); 
       reject(output); 

      } 
     }); 
     connection.end(); 

    } catch (err) { 
     let output = {'speech': 'try-catch block error', 'displayText': 'try-catch block error3'}; 
     console.log(output); 
     reject(output); 

    } 

} 
); 
} 

如果我取代與此查詢,它的工作原理:

'SELECT描述AS解決方案從mtable WHERE ID LIKE 1001'

ID是列名,只有id`s

標題列名和標題,如早餐包等

這是網絡掛接JSON所示的錯誤的部分:

"metadata": { 
    "intentId": "<id>", 
    "webhookUsed": "true", 
    "webhookForSlotFillingUsed": "false", 
    "webhookResponseTime": 5000, 

"status": { 
"code": 206, 
"errorType": "partial_content", 
"errorDetails": "Webhook call failed. Error: Request timeout.", 
"webhookTimedOut": true 
    }, 

我引用的代碼如下線程, How to get results from MySql DB using node.js MySQL and send them back to API.ai

沙发
0
0

似乎是在您的查詢字符串聲明中的錯別字(接近「%早餐% ''):

connection.query('SELECT description AS solution FROM mtable WHERE title LIKE '%Breakfast%'', function (error, results, fields) { 

在分配您的查詢字符串變量, 'SELECT描述AS解決方案從mtable WHERE標題LIKE '%早餐%'' 被解釋爲一個數字(因爲%運營商)。

以任何方式修復您的單引號是否有幫助?

connection.query("SELECT description AS solution FROM mtable WHERE title LIKE '%Breakfast%'", function (error, results, fields) { 
+0

問候,這確實解決了錯誤,但我仍然沒有從數據庫中獲取任何數據。 json只是說超時。 (API.ai在超時之前僅等待5秒,可能是什麼解決方案?「狀態」:{ 「code」:206, 「errorType」:「partial_content」, 「errorDetails」:「Webhook調用失敗。錯誤:請求超時。「, 」webhookTimedOut「:true – Jarvis

+0

我對API.ai並不熟悉我只在您的JavaScript代碼中發現了一些奇怪的東西 如果它解決了您在問題中提到的第一個問題,您的問題與關於您當前問題(包含錯誤消息)和最重要的信息相關,爲每項涉及的技術(api.ai等)添加標籤。 – RogerC

板凳
0
0

問題必須在您的服務器端與MySQL。我每天都這樣做,並且在5秒鐘內用於查詢的情況下,它可以正常工作。

可能是你的Where子句正在創建全表掃描,因此超時返回Diagflow(> 5秒)或db連接中斷。

您需要在例程和結束週期之前設置定時器,查看您的持續時間。單獨從bash腳本運行查詢並查看需要多長時間。你會發現超時正在發生的地方。在條件兩邊都有搜索參數(%)肯定會比搜索字符串的開始時間(意味着以搜索開始)和%search%(找到包含的任何子字符串)花費更長的時間。

祝你好運。

0
votes
answers
9 views
+10

MySQL在同一個表結合不同的計數()

1

我的數據庫擁有「LASTONLINE」時間戳變量時,在用戶登錄,我想用這個以檢索3個值MySQL在同一個表結合不同的計數()

即獲得更新
[The total amount of users][users online today][users online in the last hour]. 

我能做的每一聲明seperately

SELECT count(u.id) AS usersTotal FROM user u 

SELECT count(u.id) AS usersDay FROM user u 
WHERE u.lastOnline >= now() - INTERVAL 1 DAY 

SELECT count(u.id) AS usersHour FROM user u 
WHERE u.lastOnline >= now() - INTERVAL 1 HOUR 

,但我有麻煩加盟/聯合他們的3成一個查詢

謝謝

沙发
0
1

你可以使用:

SELECT count(u.id) AS usersTotal 
     ,SUM(u.lastOnline >= now() - INTERVAL 1 DAY) AS usersDay 
     ,SUM(u.lastOnline >= now() - INTERVAL 1 HOUR) AS usersHour 
FROM user u; 

工作原理:

u.lastOnline >= now() - INTERVAL 1 DAY回真(1)或假(0)。

+1

完美...非常感謝! – Rik1988

+0

在標記上有十分鐘回答,再次感謝您的快速回復 – Rik1988

0
votes
answers
8 views
+10

SQL SELECT項目,而不字符

1

我有以下SQL:SQL SELECT項目,而不字符

SELECT 
    M.* 
FROM 
    (
    SELECT MAX(counter) AS FirstUserDate, imdb_id, language, season, aufloesung, episode 
    FROM autofehlerserie 
    GROUP BY imdb_id, language 
    ) foo 
    JOIN 
    autofehlerserie M ON foo.imdb_id = M.imdb_id AND foo.language = M.language 
ORDER BY 
    foo.FirstUserDate DESC, M.imdb_id, M.aufloesung, cast(M.season as int), cast(M.episode as int) 

但我只想要SELECT items WHERE marker not = "D"

在那裏我有添加此此select查詢?

+1

您可以用'<>'來表示「不等於」。例如:'SELECT * FROM table WHERE marker <>'D''。這是你想要做的嗎? – RToyo

+0

但是我必須添加這個嗎? – SebastianHannes

+0

標記在sql「autofehlerserie」 – SebastianHannes

沙发
0
2

使用它象下面這樣:

SELECT 
    M.* 
FROM 
    (
    SELECT MAX(counter) AS FirstUserDate, imdb_id, language, season, aufloesung, episode 
    FROM autofehlerserie 
    WHERE marker <> 'D' 
    GROUP BY imdb_id, language, season, aufloesung, episode 
    ) foo 
    JOIN 
    autofehlerserie M ON foo.imdb_id = M.imdb_id AND foo.language = M.language and M.marker <> 'D' 
ORDER BY 
    foo.FirstUserDate DESC, M.imdb_id, M.aufloesung, cast(M.season as int), cast(M.episode as int) 
+0

是什麼讓你認爲只能檢查標記才能找到排序鍵?我寧願認爲OP也希望它應用於主查詢。 –

+0

但我不認爲它需要在主查詢中添加該條件,因爲OP正在使用'INNER JOIN',整個查詢將產生結果與'marker'>'D'' –

+0

我看到它的所有無論如何,marker =「D」!這不是解決方案! – SebastianHannes

板凳
0
0

我想你可能真的想:

select m.* 
from autofehlerserie m 
where not exists (select 1 
        from autofehlerserie m2 
        where m2.imdb_id = m.imdb_id AND m2.language = m.language and 
         m2.marker = 'D' 
       ); 

這將返回表中的所有行,其中有沒有其他行具有相同的imdb_idlanguage其是'D'

0
votes
answers
8 views
+10

如何使用SQLAlchemy/Mysql存儲3D圖形(x,y,z)數據?

0

我正在使用Python的Flask將3D圖形的X,Y,Z值賦給Javascript(Plotly庫)。數據是這樣的:如何使用SQLAlchemy/Mysql存儲3D圖形(x,y,z)數據?

z = [1,1,1,1,1,1,1,1,1,1,1,1]; 
x = [0.0100,0.0420,0.0500,0.0508,0.0769,0.0883,0.0900,0.1101,0.1256,0.1300,0.1385,0.1607]; 
y = [0.0131,0.0190,0.0248,0.0250,0.0310,0.0370,0.0384,0.0430,0.0490,0.0530,0.0550,0.0610]; 

所有這些都爲1個的3D圖形和它看起來像這樣: enter image description here

問題是,我會在我的網站很多3D圖形和他們都儲存在代碼中的Python數組很荒謬。將所有這些座標存儲在數據庫中最有效的方法是什麼?謝謝。

+0

您可以將這些變量轉換爲JSON並將其轉換成字符串,並將其存儲到數據庫,但是你需要再次轉換回得到時字符串值。 –

沙发
0
1

您可以使用PostgreSQL數據庫,這是有數組的,所以,你可以創建一個表,你會包含列:

id: integer 
graph_name: text 
xpoints: double precision[] 
ypoints: double precision[] 
zpoints: double precision[] 

其中,「雙精度[]」是8個字節的float數組數據類型。

所以每個圖都會存儲在表的一行中。

對於數組列,你應該使用postgresql.ARRAY數據類型(在SQLAlchemy中)

+0

謝謝,我會看看它 –

0
votes
answers
8 views
+10

如何將我的統一項目連接到EC2實例上的mysql服務器

1

我想從我的MySQL服務器獲取數據到我的Unity項目。我試圖讓像這樣的數據:如何將我的統一項目連接到EC2實例上的mysql服務器

public string awsurl = "ec2-174-129-82-141.compute-1.amazonaws.com/connect_to_server.php"; 
IEnumerator GetScores() 
{ 
     print("get scores start"); 
     WWW aws_get = new WWW(awsurl); 
     yield return aws_get; 
     print("getscore here"); 
     if (aws_get.error != null) 
     { 
      print("There was an error getting aws: " + aws_get.error); 
     } 
     else 
     { 
      print(aws_get.text); // this is a GUIText that will display the scores in game. 
     } 
} 

我有一個PHP腳本我的服務器來處理,因爲我使用的的MySqlConnection庫我合一項目有麻煩的互動上。 這裏是我的PHP腳本:

$address = "localhost" 
$dbusername = "root"; 
$dbpassword = "root"; 
$db_name = "watshoes"; 
$db_conn = new mysqli($address, $dbusername, $dbpassword, $db_name); 
    if(isset($_POST['username'])) $username = $_POST['username']; 
    if(isset($_POST['user_id'])) $user_id = $_POST['user_id']; 
    if(isset($password)) $password =$_POST['password']; 

    $stmt = $db_conn->prepare("SELECT image FROM ImageText"); 
    // "s" means the database expects a string 
    $stmt->bind_param("s", $user_id); 
    if($stmt->execute()) 
    { 
     /* bind result variables */ 
     $stmt->bind_result($image); 
     /* fetch value */ 
     $stmt->fetch(); 
     echo $image; 
    } 
    else 
    { 
     echo "query failed"; 
    } 
    $stmt->close(); 
    $db_conn->close(); 

但每次我運行代碼時我得到這個錯誤:There was an error getting aws: Failed to connect to ec2-174-129-82-141.compute-1.amazonaws.com port 80: Timed out

感謝您看代碼,並請讓我知道如果有什麼我可以做幫助。

0
votes
answers
8 views
+10

從SQL Management Studio到RPI MySql

0

我開始學習數據庫,我正在試驗硬件。在樹莓派我已經安裝了MySql。我也安裝了phpMyAdmin,我可以通過Web界面管理數據庫。從SQL Management Studio到RPI MySql

現在,我想用Microsoft SQL Server Management Studio連接到該數據庫,但我不知道如何。在樹莓上,我允許來自所有IP地址的連接(不僅是默認的127.0.0.1),但我不知道接下來要做什麼? 當我嘗試連接時,我收到此消息。 https://image.prntscr.com/image/QCKYcgmeRfeRgqMYP6DcbA.png

這是我的連接數據的圖片。這個可以嗎?

https://image.prntscr.com/image/y6g8C-whR4aUEM0qPtg4lg.png

+1

不用擔心,它有發生在每個人:) – Shadow

沙发
0
1

的Microsoft SQL Server Management Studio中可單獨連接到Microsoft SQL Server,沒有別的。它的名字應該是一個巨大的贈品......

有幾十個的桌面應用程序,你可以用它來管理MySQL服務器,如MySQL工作臺,SQLyog的,heidisql等

0
votes
answers
8 views
+10

「SHOW COLUMNS」命令中的字段如何映射到特定表?

0

這裏是一個查看名爲viewwithcommonfield:「SHOW COLUMNS」命令中的字段如何映射到特定表?

SELECT 
     `schematopologytest01`.`talpha`.`CommonField` AS `CommonField_tAlpha`, 
     `schematopologytest01`.`tbeta`.`CommonField` AS `CommonField_tBeta` 
    FROM 
     (`schematopologytest01`.`talpha` 
     JOIN `schematopologytest01`.`tbeta`) 

當我執行

SHOW FULL fields FROM viewwithcommonfield IN SchemaTopologyTest01 

我得到這個: Results of SHOW FULL...

如何字段映射回特定的表?我可以針對information_schema中的表編寫視圖嗎?

以下是視圖中引用的表結構。該表共享稱爲CommonField公共字段: enter image description here

沙发
0
0

沒有,也沒有提供給基表回到原來的列映射視圖的列的元數據。這將需要多個表,因爲select-list中的任何給定表達式可能引用不同表中的多個列。

考慮:

SELECT CONCAT(
    `schematopologytest01`.`talpha`.`AlphaFieldA`, 
    `schematopologytest01`.`tbeta`.`BetaFieldE`) AS `ConcatenatedField` 
FROM `schematopologytest01`.`talpha` 
JOIN `schematopologytest01`.`tbeta` ON ... 

哪個表和列將ConcatenatedField列表作爲它的來歷?它必須存儲在另一個INFORMATION_SCHEMA表的兩行中。

有在不引用任何基礎表的視圖也可以選擇列表表達式:

CREATE VIEW ViewNow AS SELECT NOW() AS `now`; 

什麼本身是標量子查詢列?或者對存儲函數的引用?或者像COUNT()SUM()這樣的聚合函數,其中的值在任何基表中都找不到?

許多視圖根本不確定地從基表中派生它們的數據。編輯:我的意思是,並不總是可以知道哪些行或列是視圖中數據的來源,因爲它們的結果以某種方式組合在一起。這可能更清楚地說,正反向查詢獲取原始數據並不總是可能的,這取決於查詢。

無法更新這些視圖。但是如果有關於數據「來自何處」的元數據,則元數據中必須包含某些內容以表明這一點。這將是不切實際的,因爲它會很複雜,價值不大。

+0

「許多視圖根本不確定性地從基表推導出它們的數據。」whaaaa ?? – nicomp

+0

例如,在任何具有GROUP BY或DISTINCT或UNION以及某些JOIN的視圖中,無法使視圖可更新,因爲數據源不明確或聚合。這就是我的意思。請參閱上面的編輯以獲得更多的說明。 –