Меню

Хитрое соединение данных двух таблиц

Запрос на выборку из двух таблиц в AdoQuery в Delphi

Доброго времени суток! Подскажите, как сделать запрос на выборку нескольких полей из двух таблиц через AdoQuery в Delphi. Сама база на Access-е. Никак не получается сделать (( выдает только первую строку и все (

Добавлено через 9 минут
Забыла сказать, нужно, чтобы выдавал то, что вводишь в Edit.
Помогите студентке, пожалуйста ))))

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

Запрос на выборку из двух таблиц
Люди, беда! Не пойму, как реализовать. Есть три таблицы, с друг другом связанные. Есть форма.

Запрос на выборку из двух таблиц
столкнулся с такой вот проблемой. существует допустим две таблицы А (id->1,2,3,4,5) и B.

Запрос на выборку из двух таблиц
есть две таблицы таблица_разделов: id;id_parent;name_razdel таблица_товаров.

Запрос на выборку из двух таблиц
Есть две таблицы EMP(персонал) с полями id,fio,dep_id и DEP(подразделение) c полями dep_id и.

У меня две таблицы: Основная и Сражения
Основная: Название_Корабля,Водоизмещение,Год_спуска_на_воду,ID (ключевое)
Сражения: Название_сражения,Дата_сражения,Место_сражения,Результат,ID( ключевое) и ID_Osn (для связи), связаны через поля ID (Основная) и ID_Osn (Сражения).
В Access-е запрос сделала, он работает:

а в делфи сто раз уже пыталась, все варианты не вспомню))) ну вот последний:

Спасибо большое. Очень помогли. Я пыталась делать с параметром, только криво все написала )))
А если делать запрос на удаление?

Добавлено через 29 минут
Я еще ламер в этом деле((( опять только первую строку выдает(
Вы можете написать код в делфи (то, что должно быть в процедуре нажатия кнопки)? Заранее спасибо.

Сообщение от QSunny
Сообщение от QSunny

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

Запрос на выборку из двух таблиц
Всем доброго времени суток. Помогите пожалуйста составить SQL-запрос. Есть две таблицы.

Запрос на выборку из двух таблиц Mysql
Всем доброго времени. Суть вопроса такова : есть 2 таблицы — первая: Куплено вторая: Продано. Обе.

Запрос на выборку данных из двух таблиц с суммированием
Пишу программу на VB.net, и никак не получается составить запрос к БД Access/ В БД Access есть.

Запрос на выборку из двух таблиц и сложение результата
Здравствуйте! Мне нужно из 2-х несвязанных таблиц выбирать 2 значения по времени и складывать их.

Источник

SQL-запросы в Delphi

Компоненты Delphi для работы с базами данных были созданы в расчете на работу с SQL и архитектурой клиент/сервер. При работе с ними вы можете воспользоваться характеристиками расширенной поддержки удаленных серверов. Delphi осуществляет эту поддержку двумя способами. Во-первых, непосредственные команды из Delphi позволяют разработчику управлять таблицами, устанавливать пределы, удалять, вставлять и редактировать существующие записи. Второй способ заключается в использовании запросов на языке SQL, где строка запроса передается на сервер для ее разбора, оптимизации, выполнения и передачи обратно результатов.

Примечание: Данный документ представляет собой коллективный труд нескольких авторов, которые индивидуально несут ответственность за качество предоставленной здесь информации. Borland не предоставлял, и не может предоставить никакой гарантии относительно содержимого данного документа.

  • Введение
  • Компонент TQuery
    • Свойство SQL
    • Свойство Params
    • Источник данных
    • Команда Format
    • Open против ExecSQL
  • Компонент TStoredProc
  • TDatabase
  • Выводы

1. Введение

Данный документ делает акцент на втором методе доступа к базам данных, на основе запросов SQL (pass-through). Авторы не стремились создать курсы по изучению синтаксиса языка SQL и его применения, они ставили перед собой цель дать несколько примеров использования компонентов TQuery и TStoredProc. Но чтобы сделать это, необходимо понимать концепцию SQL и знать как работают selects, inserts, updates, views, joins и хранимые процедуры (stored procedures). Документ также вскользь касается вопросов управления транзакциями и соединения с базой данных, но не акцентирует на этом внимание. Итак, приступая к теме, создайте простой запрос типа SELECT и отобразите результаты.

2. Компонент TQuery

Если в ваших приложениях вы собираетесь использовать SQL, то вам непременно придется познакомиться с компонентом TQuery. Компоненты TQuery и TTable наследуются от TDataset. TDataset обеспечивает необходимую функциональность для получения доступа к базам данных. Как таковые, компоненты TQuery и TTable имеют много общих признаков. Для подготовки данных для показа в визуальных компонентах используется все тот же TDatasource. Также, для определения к какому серверу и базе данных необходимо получить доступ, необходимо задать имя псевдонима. Это должно выполняться установкой свойства aliasName объекта TQuery.

Свойство SQL

Все же TQuery имеет некоторую уникальную функциональность. Например, у TQuery имеется свойство с именем SQL. Свойство SQL используется для хранения SQL-запроса. Ниже приведены основные шаги для составления запроса, где все служащие имеют зарплату свыше $50,000.

    Создайте объект TQuery

Задайте псевдоним свойству DatabaseName. (Данный пример использует псевдоним IBLOCAL, связанный с демонстрационной базой данных employee.gdb).

Выберите свойство SQL и щелкните на кнопке с текстом — ‘. ‘ (три точки, Инспектор Объектов — В.О.). Должен появиться диалог редактора списка строк (String List Editor).

Введите: Select * from EMPLOYEE where SALARY>50000. Нажмите OK.

Выберите в Инспекторе Объектов свойство Active и установите его в TRUE.

Разместите на форме объект TDatasource.

Установите свойство Dataset у TDatasource в Query1.

Разместите на форме TDBGrid.

  • Установите его свойство Datasource в Datasource1.
  • Свойство SQL имеет тип TStrings. Объект TStrings представляет собой список строк, и чем-то похож на массив. Тип данных TStrings имеет в своем арсенале команды добавления строк, их загрузки из текстового файла и обмена данными с другим объектом TStrings. Другой компонент, использующий TStrings — TMemo. В демонстрационном проекте ENTRSQL.DPR (по идее, он должен находится на отдельной дискете, но к «Советам по Delphi» она не прилагается — В.О.), пользователь должен ввести SQL-запрос и нажать кнопку «Do It» («сделать это»). Результаты запроса отображаются в табличной сетке. В Листинге 1 полностью приведен код обработчика кнопки «Do It».

    Свойство Params

    Этого должно быть достаточно для пользователя, знающего SQL. Тем не менее, большинство пользователей не знает этого языка. Итак, ваша работа как разработчика заключается в предоставлении интерфейса и создании SQL-запроса. В Delphi, для создания SQL-запроса на лету можно использовать динамические запросы. Динамические запросы допускают использование параметров. Для определения параметра в запросе используется двоеточие (:), за которым следует имя параметра. Ниже приведен пример SQL-запроса с использованием динамического параметра:

    Читайте также:  Контрольное тестирование электронные таблицы

    Если вам нужно протестировать, или установить для параметра значение по умолчанию, выберите свойство Params объекта Query1. Щелкните на кнопке ‘. ‘. Должен появиться диалог настройки параметров. Выберите параметр Dept_no. Затем в выпадающем списке типов данных выберите Integer. Для того, чтобы задать значение по умолчанию, введите нужное значение в поле редактирования «Value».

    Для изменения SQL-запроса во время выполнения приложения, параметры необходимо связать (bind). Параметры могут изменяться, запрос выполняться повторно, а данные обновляться. Для непосредственного редактирования значения параметра используется свойство Params или метод ParamByName. Свойство Params представляет из себя массив TParams. Поэтому для получения доступа к параметру, необходимо указать его индекс. Для примера,

    Свойство asInteger читает данные как тип Integer (название говорит само за себя). Это не обязательно должно указывать но то, что поле имеет тип Integer. Например, если тип поля VARCHAR(10), Delphi осуществит преобразование данных. Так, приведенный выше пример мог бы быть записан таким образом:

    Если вместо номера индекса вы хотели бы использовать имя параметра, то воспользуйтесь методом ParamByName. Данный метод возвращает объект TParam с заданным именем. Например:

    В листинге 2 приведен полный код примера.

    Обратите внимание на процедуру, первым делом подготавливающую запрос. При вызове метода prepare, Delphi посылает SQL запрос на удаленный сервер. Сервер выполняет грамматический разбор и оптимизацию запроса. Преимущество такой подготовки запроса состоит в его предварительном разборе и оптимизации. Альтернативой здесь может служить подготовка сервером запроса при каждом его выполнении. Как только запрос подготовлен, подставляются необходимые новые параметры, и запрос выполняется.

    Источник данных

    В предыдущем примере пользователь мог ввести номер отдела, и после выполнения запроса отображался список сотрудников этого отдела. А как насчет использования таблицы DEPARTMENT, позволяющей пользователю легко перемещаться между пользователями и отделами?

    Примечание: Следующий пример использует TTable с именем Table1. Для Table1 имя базы данных IBLOCAL, имя таблицы — DEPARTMENT. DataSource2 TDatasource связан с Table1. Таблица также активна и отображает записи в TDBGrid.

    Способ подключения TQuery к TTable — через TDatasource. Есть два основных способа сделать это. Во-первых, разместить код в обработчике события TDatasource OnDataChange. Например, листинг 3 демонстрирует эту технику.

    Листинг 3 — Использования события OnDataChange для просмотра дочерних записей

    Техника с использованием OnDataChange очень гибка, но есть еще легче способ подключения Query к таблице. Компонент TQuery имеет свойство Datasource. Определяя TDatasource для свойства Datasource, объект TQuery сравнивает имена параметров в SQL-запросе с именами полей в TDatasource. В случае общих имен, такие параметры заполняются автоматически. Это позволяет разработчику избежать написание кода, приведенного в листинге 3 (*** приведен выше ***).

    Фактически, техника использования Datasource не требует никакого дополнительного кодирования. Для подключения запроса к таблице DEPT_NO выполните действия, приведенные в листинге 4.

    Листинг 4 — Связывание TQuery c TTable через свойство Datasource

    Выберите у Query1 свойство SQL и введите:

    Выберите свойство Datasource и назначьте источник данных, связанный с Table1 (Datasource2 в нашем примере)

    Выберите свойство Active и установите его в True

    Это все, если вы хотите создать такой тип отношений. Тем не менее, существуют некоторые ограничения на параметризованные запросы. Параметры ограничены значениями. К примеру, вы не можете использовать параметр с именем Column или Table. Для создания запроса, динамически изменяемого имя таблицы, вы могли бы использовать технику конкатенации строки. Другая техника заключается в использовании команды Format.

    Команда Format

    Команда Format заменяет параметры форматирования (%s, %d, %n и пр.) передаваемыми значениями. Например,

    Результатом вышеприведенной команды будет ‘Select * from EMPLOYEE’. Функция буквально делает замену параметров форматирования значениями массива. При использовании нескольких параметров форматирования, замена происходит слева направо. Например,

    Результатом команды форматирования будет ‘Select * from EMPLOYEE where EMP_ID=3’. Такая функциональность обеспечивает чрезвычайную гибкость при динамическом выполнении запроса. Пример, приведенный ниже в листинге 5, позволяет вывести в результатах поле salary. Для поля salary пользователь может задавать критерии.

    Листинг 5 — Использование команды Format для создания SQL-запроса

    В этом примере мы используем методы Clear и Add свойства SQL. Поскольку «подготовленный» запрос использует ресурсы сервера, и нет никакой гарантии что новый запрос будет использовать те же таблицы и столбцы, Delphi, при каждом изменении свойства SQL, осуществляет операцию, обратную «подготовке» (unprepare). Если TQuery не был подготовлен (т.е. свойство Prepared установлено в False), Delphi автоматически подготавливает его при каждом выполнении. Поэтому в нашем случае, даже если бы был вызван метод Prepare, приложению от этого не будет никакой пользы.

    Open против ExecSQL

    В предыдущих примерах TQuerie выполняли Select-запросы. Delphi рассматривает результаты Select-запроса как набор данных, типа таблицы. Это просто один класс допустимых SQL-запросов. К примеру, команда Update обновляет содержимое записи, но не возвращает записи или какого-либо значения. Если вы хотите использовать запрос, не возвращающий набор данных, используйте ExecSQL вместо Open. ExecSQL передает запрос для выполнения на сервер. В общем случае, если вы ожидаете, что получите от запроса данные, то используйте Open. В противном случае допускается использование ExecSQL, хотя его использование с Select не будет конструктивным. Листинг 6 содержит код, поясняющий сказанное на примере.

    Все приведенные выше примеры предполагают использования в ваших приложениях запросов. Они могут дать солидное основание для того, чтобы начать использовать в ваших приложениях TQuery. Но все же нельзя прогнозировать конец использования SQL в ваших приложениях. Типичные серверы могут предложить вам другие характеристики, типа хранимых процедур и транзакций. В следующих двух секциях приведен краткий обзор этих средств.

    3. Компонент TStoredProc

    Хранимая процедура представляет собой список команд (SQL или определенного сервера), хранимых и выполняемых на стороне сервера. Хранимые процедуры не имеют концептуальных различий с другими типами процедур. TStoredProc наследуется от TDataset, поэтому он имеет много общих характеристик с TTable и TQuery. Особенно заметно сходство с TQuery. Поскольку хранимые процедуры не требуют возврата значений, те же правила действуют и для методов ExecProc и Open. Каждый сервер реализует работу хранимых процедур с небольшими различиями. Например, если в качестве сервера вы используете Interbase, хранимые процедуры выполняются в виде Select-запросов. Например, чтобы посмотреть на результаты хранимой процедуры, ORG_CHART, в демонстрационной базе данных EMPLOYEE, используйте следующих SQL-запрос:

    Читайте также:  Премьер лига 2014 2015 Футбол Россия

    При работе с другими серверами, например, Sybase, вы можете использовать компонент TStoredProc. Данный компонент имеет свойства для имен базы данных и хранимой процедуры. Если процедура требует на входе каких-то параметров, используйте для их ввода свойство Params.

    4. TDatabase

    Компонент TDatabase обеспечивает функциональность, которой не хватает TQuery и TStoredProc. В частности, TDatabase позволяет создавать локальные псевдонимы BDE, так что приложению не потребуются псевдонимы, содержащиеся в конфигурационном файле BDE. Этим локальным псевдонимом в приложении могут воспользоваться все имеющиеся TTable, TQuery и TStoredProc. TDatabase также позволяет разработчику настраивать процесс подключения, подавляя диалог ввода имени и пароля пользователя, или заполняя необходимые параметры. И, наконец, самое главное, TDatabase может обеспечивать единственную связь с базой данных, суммируя все операции с базой данных через один компонент. Это позволяет элементам управления для работы с БД иметь возможность управления транзакциями.

    Транзакцией можно считать передачу пакета информации. Классическим примером транзакции является передача денег на счет банка. Транзакция должна состоять из операции внесения суммы на новый счет и удаления той же суммы с текущего счета. Если один из этих шагов по какой-то причине был не выполнен, транзакция также считается невыполненной. В случае такой ошибки, SQL сервер позволяет выполнить команду отката (rollback), без внесения изменений в базу данных. Управление транзакциями зависит от компонента TDatabase. Поскольку транзакция обычно состоит из нескольких запросов, вы должны отметить начало транзакции и ее конец. Для выделения начала транзакции используйте TDatabase.BeginTransaction. Как только транзакция начнет выполняться, все выполняемые команды до вызова TDatabase.Commit или TDatabase.Rollback переводятся во временный режим. При вызове Commit все измененные данные передаются на сервер. При вызове Rollback все изменения теряют силу. Ниже в листинге 7 приведен пример, где используется таблица с именем ACCOUNTS. Показанная процедура пытается передать сумму с одного счета на другой.

    И последнее, что нужно учесть при соединении с базой данных. В приведенном выше примере, TDatabase использовался в качестве единственного канала для связи с базой данных, поэтому было возможным выполнение только одной транзакции. Чтобы выполнить это, было определено имя псевдонима (Aliasname). Псевдоним хранит в себе информацию, касающуюся соединения, такую, как Driver Type (тип драйвера), Server Name (имя сервера), User Name (имя пользователя) и другую. Данная информация используется для создания строки соединения (connect string). Для создания псевдонима вы можете использовать утилиту конфигурирования BDE, или, как показано в примере ниже, заполнять параметры во время выполнения приложения.

    TDatabase имеет свойство Params, в котором хранится информация соединения. Каждая строка Params является отдельным параметром. В приведенном ниже примере пользователь устанавливает параметр User Name в поле редактирования Edit1, а параметр Password в поле Edit2. В коде листинга 8 показан процесс подключения к базе данных:

    Этот пример показывает как можно осуществить подключение к серверу без создания псевдонима. Ключевыми моментами здесь являются определение DriverName и заполнение Params информацией, необходимой для подключения. Вам не нужно определять все параметры, вам необходимо задать только те, которые не устанавливаются в конфигурации BDE определенным вами драйвером базы данных. Введенные в свойстве Params данные перекрывают все установки конфигурации BDE. Записывая параметры, Delphi заполняет оставшиеся параметры значениями из BDE Config для данного драйвера. Приведенный выше пример также вводит такие понятия, как сессия и метод GetTableNames. Это выходит за рамки обсуждаемой темы, достаточно упомянуть лишь тот факт, что переменная session является дескриптором database engine. В примере она добавлена только для «показухи».

    Другой темой является использование SQLPASSTHRU MODE. Этот параметр базы данных отвечает за то, как натив-команды базы данных, такие, как TTable.Append или TTable.Insert будут взаимодействовать с TQuery, подключенной к той же базе данных. Существуют три возможных значения: NOT SHARED, SHARED NOAUTOCOMMIT и SHARED AUTOCOMMIT. NOT SHARED означает, что натив-команды используют одно соединение с сервером, тогда как запросы — другое. Со стороны сервера это видится как работа двух разных пользователей. В любой момент времени, пока транзакция активна, натив-команды не будут исполняться (committed) до тех пор, пока транзакция не будет завершена. Если был выполнен TQuery, то любые изменения, переданные в базу данных, проходят отдельно от транзакции.

    Два других режима, SHARED NOAUTOCOMMIT и SHARED AUTOCOMMIT, делают для натив-команд и запросов общим одно соединение с сервером. Различие между двумя режимами заключаются в передаче выполненной натив-команды на сервер. При выбранном режиме SHARED AUTOCOMMIT бессмысленно создавать транзакцию, использующую натив-команды для удаления записи и последующей попыткой осуществить откат (Rollback). Запись должна быть удалена, а изменения должны быть сделаны (committed) до вызова команды Rollback. Если вам нужно передать натив-команды в пределах транзакции, или включить эти команды в саму транзакцию, убедитесь в том, что SQLPASSTHRU MODE установлен в SHARED NOAUTOCOMMIT или в NOT SHARED.

    5. Выводы

    Delphi поддерживает множество характеристик при использовании языка SQL с вашими серверами баз данных. На этой ноте разрешите попрощаться и пожелать почаще использовать SQL в ваших приложениях.

    Источник

    

    Delphi sql две таблицы

    Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

    Мне нужно сделать обычный sql запрос на выборку записей из двух связанных таблиц, когда я пишу:

    SELECT *
    FROM F1 INNER JOIN F2 ON F1.KK = F2.KK;

    все отлично, все данные выводятся, но как только пишу

    SELECT F2.FIO, F1.NK
    FROM F1 INNER JOIN F2 ON F1.KK = F2.KK;

    выводит ошибку.
    В Accesse проверила, все идет, в чем может быть проблема?

    Причем, пишу я вот такой запрос на вкладке Enter SQL
    SELECT NK, FIO
    FROM F1,F2
    WHERE F1.KK = F2.KK
    и он идет!!

    Читайте также:  Выберите сервис для лотереи 6 из 45

    Пишу программно и он выдает ошибку и предлагает использовать следующий столбец и так, пока я все чтолбцы не включу
    with Form6.Query1 do begin
    close;
    SQl.Clear;
    SQL.Add(‘SELECT NK, FIO FROM F1,F2 WHERE F1.KK = F2.KK’);
    Open;
    end;

    Пишу программно и он выдает ошибку и предлагает использовать следующий столбец и так, пока я все чтолбцы не включу

    Имхо, проблема у Вас не в запросе!

    А попробуйте очистить Ваш QUERY1 !
    для начала двойной щелчок по Вашему QUERY1 — откроется редактор полей.
    Если там есть хоть одно поле в списке — выделите всё и удалите! (по правой кнопке мышки).

    вполне можно и одним запросом

    З.Ы.: приведите структуру таблиц

    Вариант 2. Добавьте все необходимые (выбираемые из БД и вычисляемые) поля в FieldEditor
    потом, на OnCalcField проводите вычисления.

    есть и другие способы. но, имхо, эти два самые подходящие.

    p.s. Здесь на форуме правило: «Один вопрос — одна тема!» поэтому для нового вопроса лучше создать новую тему. и не забудьте дать этой новой теме осмысленное название, как того требуют правила.

    Еще немножко Вас подостаю
    Есть у меня две таблицы:
    F1 с полями
    KK-код специальности
    NK-Название специальности
    .
    F2 таблица
    ID
    KK-код специальности (отношение 1 ко многим)
    FIO
    MATEM-балл по математике
    RUS-балл по русскому
    INF-балл по информатике

    Мне нужны поля вычисляемые:
    SB-средний балл(Сумма баллов/3)
    RB-разница баллов
    Zach-зачисление(логич)(если ср.балл>проходного)
    Как мне эти поля заполнить запросом?
    Помогите, пожалуста.

    не понятно откуда берется проходной балл, видимо, из f1
    но выглядеть будет где-то так

    Источник

    Хитрое соединение данных двух таблиц

    Приветствую вас, форумчане!
    В процессе разработки очередной БД у меня возник вопрос, для меня как для новичка достаточно сложный, на уровне нерешаемого. Речь идёт об одной возможности, которую очень хотелось бы реализовать, и состоит она в «хитром» соединении данных двух таблиц, находящихся в отношении «Мастер-Деталь».

    Есть главная таблица «Компоненты». К ней как детальная подключена таблица «Параметры» (т.е. каждому компоненту может соответствовать произвольный список параметров и конкретных значений этих параметров). Для пущей ясности, как это выглядит, скрины прилагаются.

    И вот вопрос — как бы сделать так, чтоб в одном гриде отобразить объединённые данные из этих двух таблиц. А именно: в новом «суммирующем» гриде к существующим полям мастер-грида добавить новые поля с заголовками в виде имён параметров (а значения параметров из детальной таблицы станут значениями в добавленных полях «суммирующего» грида). Т.е. если посмотреть визуально, то детальный грид как бы разворачивается на 90 градусов и приклеивается к правой части мастер грида (см. прилагаемый скрин).

    Повторюсь, возможность очень желательная, но как это сделать (и можно ли вообще), я слабо представляю. Т.к. число записей в детальной таблице переменное, надо или динамически создавать поля для датасета, который будет хранить совмещённые данные, а потом ещё и для грида, отображающего результирующее безобразие, или использовать какой-то хитрый StringGrid. Почему «хитрый» — потому что непременным условием задачи является возможность сортировки данных по столбцам, и я пока не знаю, существует ли такая возможность даже в продвинутых гридах (например, от TMS). Кроме того (и этот момент очень существенен!), мне нужна числовая сортировка по полям значений параметров, а не текстовая, каковая будет при использовании StringGrid-а, так что вариант с «суммирующим» датасетом и гридом предпочтительнее. Результирующий датасет (если это будет датасет) может быть Read-Only, тут главное — это возможность числовой сортировки по «приклеенным» столбцам.

    Источник

    Delphi sql две таблицы


    Alexcool ( 2002-06-27 20:16 ) [0]

    Правда, не знаю как сделать, подскажите. Мне нужно сделать что-то вроде SELECT * FROM Table1, Table2. Но в этих таблицах есть поля с одинаковыми названиями, например ID. В результате я получаю DataSet с полями ID и ID_1, а хотелось бы с полями Table1ID и Table2ID. Это возможно? Если возможно, то как?


    Anatoly Podgoretsky ( 2002-06-27 20:36 ) [1]

    Если заменить * на список полей, то да, используй предикат AS


    dimis ( 2002-06-27 21:00 ) [2]

    select a.id Table1id,b.id Table2id
    from table1 a,table2 b


    Viewer ( 2002-06-27 21:04 ) [3]

    Пример

    SELECT R.*, T.ID AS TOWN_TOWN_ID, T.NAME AS TOWN_NAME, T.CODE AS TOWN_CODE, T.CTYPE_ID AS T_CTYPE_ID,
    S.ID AS STREET_STREET_ID, S.NAME AS STREET_NAME,
    C.ID AS C_ID, C.ABR AS C_ABR
    FROM BUYERS R, TOWNS T, STREET S, CTYPE C


    Viewer ( 2002-06-27 21:06 ) [4]

    Еще можно проектировать таблицы и поля как
    TABLE1_FIELDNAME1

    Но для универсальности это не здорово, хотя и обходимо.


    Polevi ( 2002-06-28 08:20 ) [5]

    это извращение


    Diana ( 2002-07-02 08:41 ) [6]

    А как на счет стандартного метода?
    Select t1.*,t2.*
    from table1 t1, table2 t2
    where t1. =t2.

    Имейте в виду без t1. =t2. записи в таблицах просто перемножатся друг на друга.
    Да и все столбцы выберать не обязательно,
    можно так
    select t1. П1, t2. П2 .
    И все будет. 🙂


    Oleggg ( 2002-07-02 09:38 ) [7]

    Юзай UNION
    select * from t1 union select * from t2.

    ЗЫ Спасибо Динана, насмешила — хороший пример того, что до девушек туго доходит, что нужно парням 🙂


    Sergey13 ( 2002-07-02 09:46 ) [8]

    2Oleggg (02.07.02 09:38)
    А ты сам то понял о чем речь? 😎
    Хороший пример того, что до некоторых парней вообще не доходит.


    Lemon_AlexL ( 2002-07-02 11:18 ) [9]

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

    Присвоить в выборке им (полям) свои названия используя инструкцию
    «ИМЯ_ПОЛЯ_В_ТАБЛИЦЕ» AS «ИМЯ_ПОЛЯ_В_РЕЗУЛЬТАТЕ». Правда для этого придется отказаться от символа «*» в SELECT, в мсто этого перечислять поля как они есть.
    Пример:
    SELECT (T1.FIELD1) AS FIELD1_FROM_T1,
    (T2.FIELD1) AS FIELD1_FROM_T2
    FROM TABLE1 T1, TABLE2 T2
    . ну и т. д.

    Источник