| 
							Ilia
							
						 | 
						
							
								  | 
								
									
									 «  : 07-04-2004 06:09 »   | 
								
								 | 
							  
							 
							Здравствуйте, уважаемые знатоки!
  Пишу небольшую БД - типа адресной базы по клиентам. Есть у меня таблицы "Предприятия", "Подразделения", "Люди". Допустим, Таблица "Предприятия" имеет первичный ключ code1, Таблица "Подразделения" имеет первичный ключ code2 и внешний ключ code1. Таблица "Люди" имеет внешние ключи code1 и code2. Вопрос первый: могут ли внешние ключи быть null?   И самое главное, мне надо собрать таблицу, где была бы информация о всех людях, предприятиях, на которых они работают и подразделениях, я пишу такой запрос:  SELECT Люди*, Предприятия.ИмяПредприятия, Подразделения.ИмяПодразделения FROM Люди, Предприятия, Подразделения WHERE Люди.code1=Предприятия.code1 AND Люди.code2=Подразделения.code2   У меня выдает 0 записей. Полагаю, это потому, что в таблице подразделения у меня пока нет ни одной записи, но по идее не для каждого человека из таблицы Люди должна быть запись в таблице Подразделения, а так получается, что тех людей, для которых в таблице Подразделения нет записей запрос мне не отобразит. Как быть? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Кто выпил весь кофе! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Chaa
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 07-04-2004 06:32 »   | 
								
								 | 
							  
							 
							Вместо INNER JOIN использовать OUTER JOIN.
  SELECT Люди*, Предприятия.ИмяПредприятия, Подразделения.ИмяПодразделения  FROM Люди INNER JOIN Предприятия ON Люди.code1=Предприятия.code1  LEFT JOIN Подразделения ON Люди.code2=Подразделения.code2 
  Outer join м.б. LEFT JOIN, RIGHT JOIN, FULL JOIN. Поэкспериментируй. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Sommer
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 07-04-2004 06:33 »   | 
								
								 | 
							  
							 
							Ilia,  ты делаешь выборку сразу из некоторых таблиц
  я думаю более логичнго было бы создать болшую таблицу, в которой скажем в поле предприятие стояли не названия предприятий, а индексы соответсвующих названий в таблице предприятие т.е. на все что имеет ограниченную разновидность(например, типы предприятий )сделать по таблице, а в главную вставлять индексы и уже делать запрос из одной таблицы
  понимаешь?..
  что значит "внешние ключи"?.. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							когда-нибудь, я верю, ты будешь ехать по этому городу и поймёшь, что хочешь увидеть меня за рулём мчащейся по соседней полосе машины.  но тогда меня уже не будет в этом городе  forever yours. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Sommer
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 07-04-2004 06:35 »   | 
								
								 | 
							  
							 
							Ilia,  я наверное парю.. ты вроде делаешь так как я предложил... мне смутили строки " WHERE Люди.code1=Предприятия.code1  AND Люди.code2=Подразделения.code2 " 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							когда-нибудь, я верю, ты будешь ехать по этому городу и поймёшь, что хочешь увидеть меня за рулём мчащейся по соседней полосе машины.  но тогда меня уже не будет в этом городе  forever yours. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Oldy
							
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 07-04-2004 06:45 »   | 
								
								 | 
							  
							 
							 мне смутили строки  "  WHERE Люди.code1=Предприятия.code1  AND Люди.code2=Подразделения.code2  "
 
 Ну правильно они Вас смутили. Неявный JOIN с явным нарушением условий выборки. Основная таблица (master) -  "Люди"- приравнивать нужно к ней, а не ее.  Т.е.:  WHERE Предприятие.code1=Люди.code1. И еще непонятно - зачем "подразделение" ссылается на "предприятие" если из "Люди" имеются и ссылки к обеим справочникам?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением, Oldy. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Sommer
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 07-04-2004 07:12 »   | 
								
								 | 
							  
							 
							Oldy, ко мне на "ты"    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							когда-нибудь, я верю, ты будешь ехать по этому городу и поймёшь, что хочешь увидеть меня за рулём мчащейся по соседней полосе машины.  но тогда меня уже не будет в этом городе  forever yours. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ilia
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 07-04-2004 07:47 »   | 
								
								 | 
							  
							 
							Chaa, Sommer, Oldy, спасибо, я немного разобрался. Действительно OUTER JOIN возвращает все записи. Sommer, внешние ключи - foreign key - так у нас препод их называет. Oldy, Подразделения у меня ссылаются на Предприятия потому, что, если можно так сказать, базовой таблицей у меня является Предприятие, Предприятие может иметь или не иметь Подразделения и может иметь или не иметь Людей, т.е. вполне вероятны ситуации когда для Предприятия есть запись о его подразделении, но нет ни одной записи о работнике. Т.е. у меня не столько контактная книга Людей, сколько контактная книга Предприятий. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Кто выпил весь кофе! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Oldy
							
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 07-04-2004 09:36 »   | 
								
								 | 
							  
							 
							 Предприятие может иметь или не иметь Подразделения и может иметь или не иметь Людей, ...
 
 Чудны дела Твои господи   ))  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением, Oldy. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							HandKot
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 07-04-2004 10:16 »   | 
								
								 | 
							  
							 
							Предприятие может иметь или не иметь Подразделения и может иметь или не иметь Людей, ...  Ilia, тогда при таких условиях может ввести еще одну таблицу-связку Пример Таблицы "Предприятия", "Подразделения", "Люди", "Связи".  "Предприятия" имеет первичный ключ code1,  "Подразделения" имеет первичный ключ code2 "Люди" имеет первичный ключ code3  "Связи" имеет три поля - Code1, Code2, Code3 Хотя решать конечно тебе  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							I Have Nine Lives You Have One Only THINK! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ilia
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 07-04-2004 10:28 »   | 
								
								 | 
							  
							 
							HandKot, в принципе идея ясна, спасибо. Я наверное попробую, поскольку чувствую, что правильно спроектировать даже такую простую базу данных не так уж и просто и стоит попробовать разные варианты. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Кто выпил весь кофе! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							HandKot
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 07-04-2004 14:21 »   | 
								
								 | 
							  
							 
							Ilia, это не моя идея. Так построена учебгая база "Борей" от Microsoft (можно посмотреть в Access) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							I Have Nine Lives You Have One Only THINK! 
						 | 
					 
				 
			 |  
		 
	 | 
	 |