sqlite3 по имени столбца в нескольких базах данных с аналогичной структурой [duplicate]

Я всегда слышал, что они использовались в противоположном смысле:

  • & является ссылочным оператором - он дает ссылку (указатель) на какой-либо объект
  • * - это оператор разыменования - он принимает ссылку (указатель) и возвращает вам упомянутый объект;
23
задан jaielob 30 September 2012 в 17:37
поделиться

6 ответов

Я думаю, что у вас двусмысленность только в InvoiceID. Другие поля кажутся разными. Итак, попробуйте This

Я просто заменю InvoiceID на Invoices.InvoiceID

   SELECT 
        VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
    FROM Vendors 
    JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
    JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
    WHERE  
        Invoices.InvoiceID IN
            (SELECT InvoiceSequence 
             FROM InvoiceLineItems
             WHERE InvoiceSequence > 1)
    ORDER BY 
        VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount

Вы можете использовать tablename.columnnae для всех столбцов (в выборе, где, по группам и по порядку) без используя любой псевдоним. Однако вы можете использовать псевдоним, руководствуясь другими ответами

35
ответ дан Sami 19 August 2018 в 03:25
поделиться
  • 1
    Да и спасибо. Я не хотел использовать псевдоним, потому что мне нужно, чтобы имя столбца оставалось InvoiceID. – jaielob 30 September 2012 в 17:49
  • 2
    Добро пожаловать. Я не использовал псевдоним только для того, чтобы почувствовать, что вы не чувствуете себя удобно с псевдонимом – Sami 30 September 2012 в 17:53

, если вы присоединяетесь к двум или более таблицам, и у них есть похожие имена для своих столбцов, сервер sql хочет, чтобы вы квалифицировали столбцы, к которым они принадлежат.

SELECT  ev.[ID]
    ,[Description]
    FROM   [Events] as ev 
    LEFT JOIN  [Units] as un ON ev.UnitID = un.UnitId  

, если таблицы Events и Units имеют одинаковое имя столбца (ID ) SQL-сервер хочет, чтобы вы использовали псевдонимы.

1
ответ дан Ahmet Arslan 19 August 2018 в 03:25
поделиться

Скорее всего, обе таблицы имеют столбец с тем же именем. Псевдоним каждой таблицы и вызовите каждый столбец с псевдонимом таблицы.

4
ответ дан dotancohen 19 August 2018 в 03:25
поделиться

У вас есть столбец InvoiceID в таблице Invoices, а также в таблице InvoiceLineItems. Механизм выполнения запроса не знает, какой из них вы хотите вернуть.

Добавление псевдонима таблицы поможет:

SELECT V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount
FROM Vendors V
JOIN Invoices I ON (...)
JOIN InvoiceLineItems IL ON (...)
WHERE ...
ORDER BY V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount
7
ответ дан Graeme Perrow 19 August 2018 в 03:25
поделиться

это потому, что некоторые из полей (в частности InvoiceID в таблице Invoices и в InvoiceLineItems ) присутствуют на обеих таблицах. Способ ответа на вопрос состоит в том, чтобы добавить к нему ALIAS.

SELECT 
    a.VendorName,  Invoices.InvoiceID, .. -- or use full tableName
FROM Vendors a   -- This is an `ALIAS` of table Vendors
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
4
ответ дан John Woo 19 August 2018 в 03:25
поделиться
  • 1
    Я собирался отредактировать ваш ответ, но мой был слишком разным, поэтому я опубликовал отмененное редактирование и ответ. Возможно, было немного поздно. I want a little guidance from you please .. По какой причине этот вопрос получил так много голосов? Спросить, потому что я буду следовать за ним, задавая вопрос в следующий раз. – Sami 30 September 2012 в 18:02
  • 2
    @Sami ваш ответ очень ясный, чем мой :) – John Woo 30 September 2012 в 18:05
  • 3
    @sami, может быть, вопрос ясен. и ОП содержит достаточно информации относительно вопроса .. – John Woo 30 September 2012 в 18:07
  • 4
    Спасибо, Джон. Я понял. – Sami 30 September 2012 в 18:09
  • 5
    @Sami - голосование по переполнению стека несколько капризна и непредсказуемо. Невозможно узнать, почему этот вопрос получил 5 upvotes. Вероятно, есть много похожих вопросов, которые также получили downvotes (ведь если OP проверил любые связанные вопросы, они бы получили ответ) – Martin Smith 30 September 2012 в 18:12

Поскольку вы соединяете две таблицы Invoices и InvoiceLineItems, которые содержат InvoiceID. измените на Invoices.InvoiceID, чтобы сделать его правильным.

5
ответ дан Uchiha_Sasuke 19 August 2018 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: