2015-09-20 3 views
1

Я разрабатываю приложение C# для локального бизнеса. Я хочу выбрать данные из 3 таблиц базы данных SQL Server 2014, а именно companyinfo, invmain, invtran.SQL Выберите данные из 3 таблиц

Companyinfo хранит название предприятия, invmain имеет номер счета-фактуры и дату продажи, а invtran имеет счет-фактуру.

Я использую ЗЕЬЕСТ так:

SELECT 
    companyinfo.name,  
    invmain.invno, invmain.date, invtrans.itemid, invtrans.unitprice 
FROM 
    companyinfo, invmain, invtrans 
WHERE 
    companyinfo.Id = 1 
    AND invmain.invno = 13 
    AND invtrans.invnumber = 13 

Но это возвращает нулевое значение, если один из таблицы не имеет никаких данных. Есть ли другой эффективный способ сделать это?

+2

[Плохие привычки пинать: используя JOIN в старом стиле] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - этот стиль старого стиля * список таблиц, разделенных запятыми * стиль был заменен синтаксисом * proper * ANSI 'JOIN' в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –

ответ

5

Используйте собственно ANSI/SQL JOIN синтаксис так:

SELECT 
    ci.name,  
    invmain.invno, invmain.date, 
    invtrans.itemid, invtrans.unitprice 
FROM 
    companyinfo ci, 
INNER JOIN 
    invmain m ON ci.companyId = m.companyId 
INNER JOIN 
    invtrans it ON it.invo = m.invno 
WHERE 
    companyinfo.Id = 1 

и вам нужно определить условия соединения между таблицами, чтобы установить "ссылки". Я выбрал INNER JOIN, который возвращает только строки, которые существуют в обеих задействованных таблицах, на основе условия соответствия, определенного после ключевого слова ON.

Если вы хотите выбрать строки из companyinfo, которые не имеют каких-либо соответствующих счетов-фактур, вы можете также использовать LEFT OUTER JOIN вместо INNER JOIN, чтобы получить обратно данные из companyinfo для компаний без каких-либо счетов

+0

Где данный параметр (номер счета-фактуры) пойдет? invmain.invno отличается от invtrans.invnumber Где вы сравниваете его с параметром, который получен? Например, 13. – wish568

+0

@ wish568: если вам нужно такое условие, добавьте его в предложение WHERE, где оно принадлежит –

+1

Большое вам спасибо @marc_s .. Это действительно сработало, как шарм. :) – wish568