Создание MySQL View с помощью ОБЪЕДИНЕНИЯ

То, что вы просите, называется «полиморфным поведением» (или «динамической диспетчеризацией»), и это базовая особенность C ++. Чтобы включить его, вам нужно сделать пару вещей:

  1. Пометить ваши методы sayhello() ключевым словом virtual (т. Е. virtual void sayhello(), а не просто void sayhello()). )

  2. Измените аргумент метода greet() на передачу по ссылке или передачу по указателю, чтобы избежать проблем с разделением объектов (т. Е. int greet(const Mother & m), а не int greet(Mother m))

Как только вы это сделаете, компилятор будет разумно выбирать, какой метод sayhello() вызывать во время выполнения, на основе фактического типа объекта аргумента m, а не жесткое кодирование выбора во время компиляции на основе типа, явно указанного в списке аргументов функции greet.

9
задан Tomalak 5 February 2009 в 08:25
поделиться

5 ответов

CREATE VIEW vw_product_services AS
SELECT DISTINCT products.pid AS id,
                products.pname AS name,
                products.p_desc AS description,
                products.p_loc AS location,
                products.p_uid AS userid,
                products.isaproduct AS whatisit
           FROM products
          UNION
          SELECT DISTINCT services.s_id AS id,
                services.s_name AS name,
                services.s_desc AS description,
                services.s_uid AS userid,
                services.s_location AS location,
                services.isaservice AS whatisit
           FROM services

Я попробовал это, и это работало! Спасибо все :)

8
ответ дан 4 December 2019 в 15:27
поделиться

У Вас есть различные типы, являющиеся unioned в тот же столбец. (Имена могут отличаться, но типы должны быть тем же, или по крайней мере auto-castable.), Но поскольку @Learning указывает, похоже на скручивание перечислений столбца SELECT.

На всякий случай правильный синтаксис (который работал на меня)

CREATE VIEW myView 
AS  
SELECT ... 
1
ответ дан 4 December 2019 в 15:27
поделиться

Просто немного комментария об ОБЪЕДИНЕНИИ. ОБЪЕДИНЕНИЕ Только возвращает отличные значения Вашего набора результатов. Таким образом, нет никакой потребности использовать ВЫБОР, ОТЛИЧНЫЙ объединенный с ОБЪЕДИНЕНИЕМ. Вероятно, лучше, чтобы производительность не использовала ОТЛИЧНЫЙ также.

Больше информации об ОБЪЕДИНЕНИИ может быть найдено здесь: Оператор ОБЪЕДИНЕНИЯ SQL

1
ответ дан 4 December 2019 в 15:27
поделиться

Сообщение об ошибке находится в "QueryBrowser.pas", части mysql-gui-tools.

procedure TQueryBrowserForm.SQLCreateViewClick(Sender: TObject);
// ... 
begin
  if Assigned(ActiveResultset) and (ActiveResultset.ResultSet.query.query_type = MYX_QT_SELECT)then
    // ... 
  else
    ShowError('Creation error', _('A view can only be created from a active resultset of SELECT command.'), []);
end;

Это инициировано, не a) не имея активный набор результатов и b) запросом, имеющим неправильный тип.

Удаление "ОТЛИЧНОГО" имеют какое-либо значение? В любом случае это - ошибка в QueryBrowser, а не один MySQL. Создание представления непосредственно в MySQL должно быть достаточным как обходное решение.

0
ответ дан 4 December 2019 в 15:27
поделиться

Вы могли бы хотеть к swith порядок идентификатора пользователя и местоположения во втором выборе. Имена столбцов должны соответствовать от 1 до 1 во всех, выбирает объединения.

РЕДАКТИРОВАНИЕ: Для браузера запроса, поскольку это указывает, "Для создания представления из запроса, Вы, должно быть, выполнили запрос успешно. Чтобы быть более точным, представление создается из последнего успешно выполняемого запроса, не обязательно от запроса в настоящее время в области Запроса"

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

Ошибка от браузера запроса и не mysql.

3
ответ дан 4 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

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