информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsЗа кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Фишинговая атака на Python-разработчиков 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
а кто-то может обяснить, как так получается в квери: 26.02.04 17:54  Число просмотров: 1172
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
а кто-то может обяснить, как так получается в квери:

SELECT ProjectInvoices.*, Invoices.InvoiceID, Contracts.ContractID, Clients.ProjectID AS CPid
FROM ProjectInvoices LEFT JOIN (Invoices 
INNER JOIN Contracts USING(ContractID) 
INNER JOIN Clients  ON (Clients.ClientID = Contracts.ClientID AND Clients.ProjectID = 3) )
ON (Invoices.TypeID = ProjectInvoices.Type )
WHERE ProjectInvoices.ProjectID = 3 
GROUP By ProjectInvoices.Type
ORDER BY ProjectInvoices.Type


---
InvoiceID не NULL, хотя выделенная болдом часть не содержит ни одного ряда ?
<beginners>
MySQL - op JOIN 26.02.04 16:30   [whiletrue]
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
предположим следующую иерархию в db:
           Bills
             |
       Contracts  
         /        \
Clients     Products

---
Bills & Contracts связанны по индексу ContractID
Contracts & Clients связанны по индексу ClientID
Contracts & Products связанны по индексу ProductID
нужно связать JOIN все 4 таблицы.
правильно ли:
Bills INNER JOIN ( Clients INNER JOIN Contracts USING(ClientID) INNER JOIN Products USING(ProductID) ) ON Bills.ContractID = Contracts.ContractID ???
вроде работает, но есть сомнения
10x
У меня вопросик есть 27.02.04 11:38  
Автор: whiletrue <Роман> Статус: Elderman
<"чистая" ссылка>
> предположим следующую иерархию в db:
>
> 	   Bills
> 	     |
>        Contracts  
> 	 /	  \
> Clients     Products
> 

---
> Bills & Contracts связанны по индексу ContractID
> Contracts & Clients связанны по индексу ClientID
> Contracts & Products связанны по индексу ProductID
> нужно связать JOIN все 4 таблицы.
> правильно ли:
> Bills INNER JOIN ( Clients INNER JOIN Contracts> USING(ClientID) INNER JOIN Products USING(ProductID) ) ON > Bills.ContractID = Contracts.ContractID > ???
> вроде работает, но есть сомнения
> 10x

Каким образом ты в MySQL связываешь по индексу?

Вот я делаю:

CREATE TABLE one (
 id int(11) NOT NULL default '0',
 data varchar(100) default NULL,
 PRIMARY KEY  (id)
) TYPE=MyISAM;

CREATE TABLE many (
 one_id int(11) NOT NULL default '0',
 data varchar(100) default NULL,
 FOREIGN KEY (one_id) REFERENCES one(id)
) TYPE=MyISAM;

---

Использую phpMyAdmin 2.5.6-rc1 вставляю это добро... все нормально хавает. Затем говорю ему экспортировать структуру БД - он мне дает точь-вточь тоже самое, но без выделенной строчки (FOREIGN KEY)!?

Вопрос: чей глюк?
1. Мой. Т.е. как-то отдельно надо индекс заводить.
2. phpMyAdmin-а
3. Или же MySQL не поддерживает FOREIGN KEY
Это не глюк, это MyISAM 06.03.04 21:33  
Автор: TLoD,Snake Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> CREATE TABLE many (
> one_id int(11) NOT NULL default '0',
> data varchar(100) default NULL,
> FOREIGN KEY (one_id) REFERENCES one(id)
> ) TYPE=MyISAM;
>
---

>
> Использую phpMyAdmin 2.5.6-rc1 вставляю это добро... все
> нормально хавает. Затем говорю ему экспортировать структуру
> БД - он мне дает точь-вточь тоже самое, но без выделенной
> строчки (FOREIGN KEY)!?
>
> Вопрос: чей глюк?
> 1. Мой. Т.е. как-то отдельно надо индекс заводить.
> 2. phpMyAdmin-а
> 3. Или же MySQL не поддерживает FOREIGN KEY

4. Тип таблиц MyISAM не поддерживает внешние ключи, транзакции. Синтаксис MySQL проглатывает для совместимости со стандартами, но реально ничего не делает.
Внешние ключи и транзакции реализованы в MySQL при использовании InnoDB таблиц. Но пока ни один хостер на моей памяти такого не разрешил.
я просто в двух таблицах один и тотже индекс определяю, а... 27.02.04 13:56  
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
я просто в двух таблицах один и тотже индекс определяю, а твой пример и в других клиентах не работает, видимо MySQL не поддерживает FOREIGN KEY
а кто-то может обяснить, как так получается в квери: 26.02.04 17:54  
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
а кто-то может обяснить, как так получается в квери:

SELECT ProjectInvoices.*, Invoices.InvoiceID, Contracts.ContractID, Clients.ProjectID AS CPid
FROM ProjectInvoices LEFT JOIN (Invoices 
INNER JOIN Contracts USING(ContractID) 
INNER JOIN Clients  ON (Clients.ClientID = Contracts.ClientID AND Clients.ProjectID = 3) )
ON (Invoices.TypeID = ProjectInvoices.Type )
WHERE ProjectInvoices.ProjectID = 3 
GROUP By ProjectInvoices.Type
ORDER BY ProjectInvoices.Type


---
InvoiceID не NULL, хотя выделенная болдом часть не содержит ни одного ряда ?
так у тебя идет обьединение LEFT, которое обьединяет ВСЕ... 02.03.04 10:32  
Автор: sarutobi Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> FROM ProjectInvoices LEFT JOIN (Invoices
> INNER JOIN Contracts USING(ContractID)
>
---

> InvoiceID не NULL, хотя выделенная болдом часть не содержит
> ни одного ряда ?
так у тебя идет обьединение LEFT, которое обьединяет ВСЕ записи слева и непустые справа....
Смотри ситаксис команды JOIN и модификаторы LEFT, Natural Left, Inner, Right.
ага, а справа все записи "пустые" и тем не менее 02.03.04 12:18  
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>

> так у тебя идет обьединение LEFT, которое обьединяет ВСЕ
> записи слева и непустые справа....
ага, а справа все записи "пустые" и тем не менее
Ты уверен в том, что не возвражает ряды данных? 26.02.04 22:49  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Этот запрос возвращает данные?

select  * from Invoices
    INNER JOIN Contracts USING(ContractID)
    INNER JOIN Clients  ON Clients.ClientID = Contracts.ClientID
  where  Clients.ProjectID = 3

---
в том то и дело, что не возвращает ничего 27.02.04 11:23  
Автор: tdes@ Статус: Незарегистрированный пользователь
<"чистая" ссылка>
и только изменение InvoiceID на 26.02.04 18:25  
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
и только изменение InvoiceID на
MAX(IF(Clients.ProjectID = 75, Invoices.InvoiceID, NULL)) AS InvoiceID помoгает
Насколько я смыслю в колбасных обрезках - inner join... 26.02.04 17:14  
Автор: whiletrue <Роман> Статус: Elderman
<"чистая" ссылка>
> предположим следующую иерархию в db:
>
> 	   Bills
> 	     |
>        Contracts  
> 	 /	  \
> Clients     Products
> 

---
> Bills & Contracts связанны по индексу ContractID
> Contracts & Clients связанны по индексу ClientID
> Contracts & Products связанны по индексу ProductID
> нужно связать JOIN все 4 таблицы.
> правильно ли:
> Bills INNER JOIN ( Clients INNER JOIN Contracts> USING(ClientID) INNER JOIN Products USING(ProductID) ) ON > Bills.ContractID = Contracts.ContractID > ???
> вроде работает, но есть сомнения
> 10x

Насколько я смыслю в колбасных обрезках - inner join обладает ассоциативностью и коммутативностью, т.е. таблицы можно связывать в любом порядке.
Re: MySQL - op JOIN 26.02.04 17:02  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Я не совсем знаком с нотацией MySQL, но так как утверждается, что MySQL поддерживает нотацию ANSI SQL '92 то можно попробовать так:

select * from Bills
  inner join Contracts on Contracts.ContractID = Bills.ContractID
  inner join Products on Products.ProductID = Contracts.ProductID
  inner join Clients on Client.ClientID = Contracts.ClientID

---

или так

select * from Bills
  inner join Contracts (
    inner join Products on Products.ProductID = Contracts.ProductID
    inner join Clients on Client.ClientID = Contracts.ClientID
      ) on Contracts.ContractID = Bills.ContractID

---
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach